Microsoft Windows 脚本技术

本节内容

JScript
Microsoft 功能强大的脚本编写语言是专为 Internet 而设计的。JScript.NET 是 Microsoft ECMA 262 语言的下一代实施产品。与 ECMAScript Edition 4 一起开发的、JScript.NET 中的改进功能包括了准确编译的代码、类型与无类型的变量、类（内含继承、函数重载、属性访问器等等）、包、跨语言支持，以及对 .NET 框架的访问。
VBScript
Microsoft Visual Basic Scripting Edition 为各种环境提供有效的脚本编写手段，包括 Microsoft Internet Explorer 中的 Web 客户端脚本编写及 Microsoft Internet Information Services 中的 Web 服务器端脚本编写。
脚本运行时
Dictionary 对象相当于 PERL 的关联数组。项可以是任意形式的数据，存储在数组中。每一个项与唯一的关键字相关联。关键字用于检索个别项，通常是一个整数或字符串，它可以是数组以外的任何内容。

FileSystemObject (FSO) 对象模型允许您使用熟悉的 object.method 语法以及一系列属性、方法和事件来处理文件夹和文件。

脚本 Encoder 是一种简单的命令行工具，它使脚本设计者能够对自己的最终脚本进行编码，这样 Web 主机和 Web 客户机就不能查看或修改它们的源代码。

Windows 脚本部件
Microsoft® Windows® 脚本部件为您提供了使用脚本语言，如 Microsoft® Visual Basic® Scripting Edition (VBScript) 和 Microsoft® JScript® 创建 COM 组件的简单方法。
Windows 脚本宿主
Microsoft Windows 脚本宿主 (WSH) 是一种工具，它允许您在基本操作系统（Windows 95 或 Windows NT 4.0.）内部运行 Visual Basic Scripting Edition 和 JScript。
Windows 脚本接口（英文）
Microsoft Windows 脚本接口为应用程序引入了一种增强脚本和 OLE 自动化功能的新方法。

相关章节

Microsoft Windows 脚本技术主页
专门讨论 Microsoft 脚本技术的综合站点。包含有关 JScript、VBScript、Windows 脚本宿主、Windows 脚本部件、远程脚本、Script 控件和脚本调试程序的完整文档。您既可以下载 JScript 和 VBScript 的最新版本，也可以下载其他 Microsoft 脚本技术的更新和增强功能。

© 2001 Microsoft Corporation. 保留所有权利。


JScript

JScript

JScript 用户指南

在 Internet Explorer 中使用 JScript

JScript 语言参考


JScript 用户指南

JScript 基础

高级 JScript


JScript 基础

什么是 Jscript？

编写 JScript 代码

JScript 变量

JScript 数据类型

JScript 运算符

运算符优先级

控制程序的流程

条件编译

条件编译变量

JScript 函数

JScript 对象

内部对象

创建自己的对象

JScript 保留字


什么是 JScript？

JScript 是 Microsoft 公司对 ECMA 262 语言规范（ECMAScript 编辑器 3）的一种实现。除了少数例外（为了保持向后兼容），JScript 完全实现了 ECMA 标准。本概述的目的就是引导您学习使用 JScript。

使用 JScript

JScript 是一种解释型的、基于对象的脚本语言。尽管与 C++ 这样成熟的面向对象的语言相比，JScript 的功能要弱一些，但对于它的预期用途而言，JScript 的功能已经足够大了。

JScript 不是其他语言的精简版（例如，它只是与 Java 有点模糊而间接的关系），也不是任何事物的简化。不过，它有其局限性。例如，您不能使用该语言来编写独立运行的应用程序，并且没有对读写文件的内置支持。此外，JScript 脚本只能在某个解释器或“宿主”上运行，如 Active Server Pages（ASP）、Internet 浏览器或者 Windows 脚本宿主。

JScript 是一种宽松类型的语言。宽松类型意味着您不必显式定义变量的数据类型。事实上 JScript 更进一步。您无法在 Jscript 上明确地定义数据类型。此外，在大多数情况下，JScript 将根据需要自动进行转换。例如，如果将一个数值添加到由文本组成的某项（一个字符串），该数值将被转换为文本。

本用户指南的其余部分是 JScript 特性概述。有关该语言实现的全部细节，请参考语言参考。

注意 下面大多数示例的代码比实际 Web 页中的代码应该更明确，并且不是太复杂。其目的是阐明相关概念，而不是提供最优的简短编码和风格。在任何情况下，如果六个月以后您还能毫不费力地阅读和理解所编写的代码，则说明这些代码写得不错。


编写 JScript 代码

与其他许多编程语言一样， Microsoft JScript 是用文本方式编写的，并被组织成为语句、由相关的语句集组成的块、以及注释。在一条语句内可以使用变量、比如字符串和数字（称为“文字”）的立即数、以及表达式。

语句

JScript 程序是语句的集合。一条 Jscript 语句相当于英语中的一个完整句。Jscript 语句将表达式组合起来，完成一个任务。

一条语句由一个或多个表达式、关键字或者运算符（符号）组成。典型地，一条语句写一行，尽管一条语句可以超过两行或更多行。两条或更多条语句也可以写在同一行上，语句之间用分号“;”隔开。通常，每一新行开始一条新语句。不过显式地终止语句是一个好方法。这是用分号 (;) 来实现的，分号是 JScript 语句的终止字符。下面给出 Jscript 语句的两个示例。

aBird = "Robin"; // 将文本“Robin”赋值给变量 aBird
var today = new Date(); // 将今天的日期赋值给变量 today

用大括号（{}）括起来的一组 JScript 语句称为一个语句块。分组到一个语句块中的语句通常可当作单条语句处理。这就是说在 JScript 期望有一条单个语句的大多数地方可以使用语句块。应该注意以 for 和 while 打头的循环语句是例外情况。注意，语句块中的原始语句以分号结束，但语句块本身并不以分号结束。

通常，在函数和条件语句中使用语句块。注意，Jscript 与 C++ 以及其他某些语言不同，它不认为语句块是一个新的范围；只有函数创建新范围。在下面的示例中，第一条语句开始定义一个函数，该函数包含一个五条语句组成的语句块。语句块后的三条语句没有用大括号括起来；这些语句不是一个语句块，所以就不是函数定义的一部分。

function convert(inches)  {
   feet = inches / 12;  //  这五条语句属于一个语句块。
   miles = feet / 5280;
   nauticalMiles = feet / 6080;
   cm = inches * 2.54;
   meters = inches / 39.37;
}
km = meters / 1000;  //  这三条语句不在语句块内。
kradius = km;
mradius = miles;

注释

单行的 JScript 注释以一对正斜杠(//)开始。下面给出一个单行注释的示例。

aGoodIdea = "Comment your code thoroughly.";  //  这是一个单行注释。

多行注释以一个正斜杠加一个星号的组合 (/*) 开始,并以其逆向顺序 (*/) 结束。

/*
这是一个用来解释前面的代码语句的多行注释。

该语句将一个值赋给 aGoodIdea 变量。
用引号包含的这种值称为一个文字。
文字显式并直接包含信息；
而不是简接地引用信息。
（引号不属于该文字的内容。）
*/
注意 如果您试图将一个多行注释插入到另一个中，JScript 不能按正常的方式解释生成的多行注释。标明嵌入的多行注释结束的 */ 被认为是整个多行注释的结尾。这就意味着嵌入多行注释之后的文本不再被认为是注释；相应地，它将被解释为 JScript 代码，并会产生语法错误。

建议将所有的注释写为单行注释的语句块。这样您以后就能够将大段的代码与多行注释区分开。

//  这是另一种多行注释，写成一系列单行注释。
//  在执行完该语句后，可以使用 aGoodIdea 变量的名字来引用其内容，
//  如下一条语句那样，即采用连接操作将字符串文字添加到
//  aGoodIdea 变量，以创建一个新的变量。

var extendedIdea = aGoodIdea + " You never know when you'll have to figure out what it does.";

赋值和相等

JScript 语句中使用等号 (=)给变量赋值：等号是赋值运算符。= 运算符左边的操作项总是一个 Lvalue。Lvalue 可以是：

  • 变量，
  • 数组元素，
  • 对象属性。

= 运算符右边的操作项总是一个 Rvalue。Rvalues 可以是任何类型的一个任意值，包括表达式的值。下面给出一个 JScript 赋值语句的示例。

anInteger = 3;

Jscript 编译器解释本语句的意义为：“将 3 赋给变量 anInteger”或“anInteger 的值为 3”。

确定您理解了 = 运算符（赋值）和 == 运算符（相等）的差异。在比较两个值是否相等时，应使用两个等于号 (==)。这些内容将在控制程序的流程中详细介绍。

表达式

JScript 表达式是指 JScript 解释器能够计算生成值的 JScript “短语”。这个值可以是任何有效的 JScript 类型 — 数字、字符串、对象，等等。最简单的表达式是文字。下面给出 JScript 文字表达式的一些示例。

3.9                       // 数字文字
"Hello!"                  // 字符串文字
false                     // 布尔文字
null                      // 文字空值
{x:1, y:2}                // 对象文字
[1,2,3]                   // 数组文字
function(x){return x*x;}  // 函数文字

更多复杂的表达式中包含变量、函数、函数调用以及其他表达式。可以用运算符将表达式组合，创建复合表达式。运算符可以是：

+  // 加法
-  // 减法
*  // 乘法
/  // 除法

下面给出 JScript 复合表达式的一些示例。

var anExpression = 3 * (4 / 5) + 6;
var aSecondExpression = Math.PI * radius * radius;
var aThirdExpression = aSecondExpression + "%" + anExpression;
var aFourthExpression = "(" + aSecondExpression + ") % (" + anExpression + ")";


JScript 的变量

JScript

JScript 变量

任何编程语言中，用一块数据量化一个概念。

How old am I?

在 Jscript 中，变量是给概念的名称；它代表了给出瞬间的值。当使用该变量时，实际是用的它所代表的数据。给出示例：

NumberOfDaysLeft = EndDate – TodaysDate;

机械的理解是使用变量来存储、得到并操作脚本中出现的所有的不同值。创建有意义的变量名称；便于别人理解脚本。

变量声明

变量在脚本中的第一次出现是在声明中。变量在第一次用到时就设置于内存中，便于后来在脚本中引用。使用变量之前先进行声明。可以使用 var 关键字来进行变量声明。

var count;  // 单个声明。
var count, amount, level;  // 用单个 var 关键字声明的多个声明。
var count = 0, amount = 100;  // 一条语句中的变量声明和初始化。

如果在 var 语句中没有初始化变量，变量自动取 JScript 值 undefined。尽管并不安全，但声明语句中忽略 var 关键字是合法的 JScript 语法。这时，JScript 解释器给予变量全局范围的可见度。当在过程级中声明一个变量时，它不能用于全局范围；这种情况下，变量声明必须用 var 关键字。

变量命名

变量名称是一个标识符。Jscript 中，用标识符来：

  • 命名变量，
  • 命名函数，
  • 给出循环的标签。

JScript 是一种区分大小写的语言。因此变量名称 myCounter 和变量名称 mYCounter 是不一样的。变量的名称可以是任意长度。创建合法的变量名称应遵循如下规则：

  • 第一个字符必须是一个 ASCII 字母（大小写均可），或一个下划线 (_)。注意第一个字符不能是数字。
  • 后续的字符必须是字母、数字或下划线。
  • 变量名称一定不能是保留字。

下面给出合法变量名称的一些示例：

_pagecount
Part9
Number_Items

下面给出无效变量名称的一些示例：

99Balloons // 不能以数字开头。
Smith&Wesson // “与”符号（&）字符用于变量名称是无效的。

当要声明一个变量并进行初始化，但又不想指定任何特殊值，可以赋值为 JScript 值 null。下面给出示例。

var bestAge = null;
var muchTooOld = 3 * bestAge; // muchTooOld 的值为 0。

如果声明了一个变量但没有对其赋值，该变量存在，其值为未定义的 Jscript 值。下面给出示例。

var currentCount;
var finalCount = 1 * currentCount; // finalCount 的值为 NaN，因为 currentCount 为 undefined。

注意在 JScript 中 null 和 undefined 的主要区别是 null 的操作象数字 0，而 undefined 的操作象特殊值 NaN （不是一个数字）。对 null 值和 undefined 值作比较总是相等的。

可以不用 var 关键字声明变量，并赋值。这就是隐式声明。

noStringAtAll = ""; // 隐式声明变量 noStringAtAll。

不能使用未经过声明的变量。

var volume = length * width; // 错误 — length 和 width 并不存在。

强制转换

表达式中操作项的数据类型相同时 JScript 解释器才能对其求值。如果表达式不经过强制转换就试图对两个不同的数据类型（如一个为数字，另一个为字符串）执行运算，将产生错误结果。但在 Jscript 中情况就不同了。

JScript 是一种自由类型的语言。它的变量没有预定类型（相对于强类型语言，如 C++）。相反，JScript 变量的类型相应于他们包含的值的类型。这种操作的好处是能将值作为另一类型处理。

在 Jscript 中，可以对不同类型的值执行运算，不必担心 JScript 解释器产生异常。相反，JScript 解释器自动将数据类型之一改变（强制转换）为另一种数据类型，然后执行运算。例如：

运算 | 结果
数值与字符串相加 | 将数值强制转换为字符串。
布尔值与字符串相加 | 将布尔值强制转换为字符串。
数值与布尔值相加 | 将布尔值强制转换为数值。

考虑下面的示例。

var x = 2000;      // 一个数字。
var y = "Hello";   // 一个字符串。
x = x + y;         // 将数字强制转换为字符串。
document.write(x); // 输出 2000Hello。

要想显式地将字符串转换为整数，使用 parseInt 方法。要想显式地将字符串转换为数字，使用 parseFloat 方法。请注意，比较大小时字符串自动转换为相等的数字，但加法（连接）运算时保留为字符串。


JScript 数据类型

Jscript 有三种主要数据类型、两种复合数据类型和两种特殊数据类型。

主要（基本）数据类型是：

  • 字符串
  • 数值
  • 布尔

复合（引用）数据类型是：

  • 对象
  • 数组

特殊数据类型是：

  • Null
  • Undefined

字符串数据类型

一个字符串值是排在一起的一串零或零以上的 Unicode 字符（字母、数字和标点符号）。字符串数据类型用来表示 JScript 中的文本。脚本中可以包含字符串文字，这些字符串文字放在一对匹配的的单引号或双引号中。字符串中可以包含双引号，该双引号两边需加单引号，也可以包含单引号，该单引号两边需加双引号。下面是字符串的示例：

"Happy am I; from care I’m free!"
'"Avast, ye lubbers!" roared the technician.'
"42"
'c'

请注意，JScript 中没有表示单个字符的类型。要表示 Jscript 中的单个字符，应创建一个只包含一个字符的字符串。包含零个字符（""）的字符串是空（零长度）字符串。

数值数据类型

在 Jscript 中整数和浮点值没有差别；JScript 数值可以是其中任意一种（JScript 内部将所有的数值表示为浮点值）。

整型值

整型值可以是正整数，负整数和 0。可以用 10 进制，8 进制和 16 进制来表示。在 Jscript 中大多数字是用十进制表示的。加前缀“0”表示 8 进制的整型值，只能包含 0 到 7 的数字。前缀为“0”同时包含数字“8”或“9”的数被解释为十进制数。

加前缀“0x”（零和x|X）表示 16 进制整型值。可以包含数字 0 到 9，以及字母 A 到 F（大写或小写）。使用字母 A 到 F 表示十进制 10 到 15 的单个数字。就是说 0xF 与 15 相等，同时 0x10 等于 16。

八进制和十六进制数可以为负，但不能有小数位，同时不能以科学计数法（指数）表示。

浮点值

浮点值为带小数部分的数。也可以用科学计数法来表示。这就是说，大写或小写“e”用来表示 10 的次方。Jscript用数值表示的八字节 IEEE754 浮点标准。这意味着数字最大可以到 ±1.7976931348623157x10308，最小到 ±5x10-324。以“0”开始且包含小数点的数字被解释为小数浮点数。

注意以“0x”或“00”开始并包含小数点的数将发生错误。以下是 Jscript 中数字的例子。

数字 | 描述 | 等价十进制数
.0001, 0.0001, 1e-4, 1.0e-4 | 四个相等的浮点数。 | 0.0001
3.45e2 | 浮点数。 | 345
42 | 整数。 | 42
0378 | 整数。虽然看起来是八进制数（以 0 开头），但是 8 不是有效的八进制数字，所以为十进制数。 | 378
0377 | 八进制整数。注意它虽然看起来比上面的数只小 1，但实际数值有很大不同。 | 255
0.0001 | 浮点数。虽然以零开头，但由于带有小数点所以不是八进制数。 | 0.0001
00.0001 | 错误。两个零开头表示为八进制，但八进制数不能带有小数部分。 | N/A （编译错误）
0Xff | 十六进制整数。 | 255
0x37CF | 十六进制整数。 | 14287
0x3e7 | 十六进制整数。注意‘e’并不被认为指数。 | 999
0x3.45e2 | 错误。十六进制数不能有小数部分。 | N/A （编译错误）

另外，Jscript 包含特殊值数字。它们是：

  • NaN （不是数）。当对不适当的数据进行数学运算时使用，例如字符串或未定义值。
  • 正无穷大。在 Jscript 中如果一个正数太大的话使用它来表示。
  • 负无穷大。在 Jscript 中如果一个负数太大的话使用它来表示。
  • 正 0 和负 0。Jscript 区分正 0 和负 0。

Boolean 数据类型

尽管字符串和数字类型可以有无数不同的值，Boolean 数据类型却只有两个值。它们是文字 true 和 false。Boolean 值是一个真值，它表示一个状态的有效性（说明该状态为真或假）。

脚本中的比较通常得到一个 Boolean 结果。考虑下一行 Jscript 代码。

y = (x == 2000);

这里要比较变量 x 的值是否与数字 2000 相等。如果相等，比较的结果为 Boolean 值 true，并将其赋给变量 y。如果 x 与 2000 不等，则比较的结果为 Boolean 值false。

Boolean 值在结构控制中尤其有用。可以将直接创建 Boolean 值的比较与用使用该 Boolean 值的语句相组合。考虑下面的 Jscript 代码范例。

if (x == 2000)
    z = z + 1;
else
    x = x + 1;

当 Boolean 值为 true 时，Jscript 中的 if/else 语句执行一个操作（这样，z = z + 1），而当 Boolean 值为 false 时执行另一个操作（x = x + 1）。

可以使用任意表达式作比较表达式。任何值为 0、null、未定义或空字符串的表达式被解释为 false。其他任意值的表达式解释为 true。例如，可以使用如下表达式：

if (x = y + z) // 这可能不是想要的结果 – 如下！

注意上面的代码并不检查 x 是否与 y+z 相等，因为仅使用了一个等号（赋值）。相反的，上面的代码将 y+z 赋给变量 x，然后检查整个表达式的值是否为零。要检查 x 是否与 y+z 相等，使用如下代码。

if (x == y + z) // 这与上面的代码不同！

有关比较的详细信息，请参见控制程序的流程。

Null 数据类型

在 Jscript 中数据类型 null 只有一个值：null。关键字 null 不能用作函数或变量的名称。

包含 null 的变量包含“无值”或“无对象”。换句话说，该变量没有保存有效的数、字符串、Boolean、数组或对象。可以通过给一个变量赋 null 值来清除变量的内容。

请注意，在 Jscript 中，null 与 0 不相等（与在 C 和 C++ 中不同）。同时应该指出的是，Jscript中 typeof 运算符将报告 null 值为 Object 类型，而非类型 null。这点潜在的混淆是为了向下兼容。

Undefined 数据类型

如下情况使返回 undefined 值：

  • 对象属性不存在，
  • 声明了变量但从未赋值。

注意不能通过与 undefined 做比较来测试一个变量是否存在，虽然可以检查它的类型是否为“undefined”。在以下的代码范例中，假设程序员想测试是否已经声明变量 x ：

// 这种方法不起作用
if (x == undefined)
    // 作某些操作

// 这个方法同样不起作用- 必须检查
// 字符串 "undefined"
if (typeof(x) == undefined)
    // 作某些操作

// 这个方法有效
if (typeof(x) == "undefined")
    // 作某些操作

考虑将 undefined 值与null做比较。

someObject.prop == null;

如下情况时，比较的结果为 true，

  • 如果属性 someObject.prop 包含 null 值，
  • 如果属性 someObject.prop 不存在。

要检查一个对象属性是否存在，可以使用新的 in 运算符：

if ("prop" in someObject)
    // someObject 有属性 'prop'


JScript 的运算符

JScript

JScript 运算符

JScript 具有全范围的运算符,包括算术、逻辑、位、赋值以及其他某些运算符。

算术运算符

描述 | 符号
负值 | -
递增 | ++
递减 | —
乘法 | *
除法 | /
取模运算 | %
加法 | +
减法 | -

逻辑运算符

描述 | 符号
逻辑非 | !
小于 | <
大于 | >
小于等于 | <=
大于等于 | >=
等于 | ==
不等于 | !=
逻辑与 | &&
逻辑或 | ||
条件（三元运算符） | ?:
逗号 | ,
严格相等 | ===
非严格相等 | !==

位运算符

描述 | 符号
按位取反 | ~
按位左移 | <<
按位右移 | >>
无符号右移 | >>>
按位与 | &
按位异或 | ^
按位或 | |

赋值运算符

描述 | 符号
赋值 | =
运算赋值 | OP=

杂项运算符

描述 | 符号
删除 | delete
typeof 运算符 | typeof
void | void
instanceof | instanceof
new | new
in | in

== （相等）与 === （严格相等）的区别在于恒等运算符在比较前强制转换不同类型的值。例如，恒等对字符串 "1" 与数值 1 的比较结果将为 true。而严格相等不强制转换不同类型的值，因此它认为字符串 "1" 与数值 1 不相同。

基本的字符串、数值和布尔值是按值比较的。如果它们的值相同，比较结果为相等。对象（包括Array、Function、String、Number、Boolean、Error、Date以及 RegExp 对象）按引用比较。即使这些类型的两个变量具有相同的值，只有在它们正好为同一对象时比较结果才为 true。

例如：

// 具有相同值的两个基本字符串。
var string1 = "Hello";
var string2 = "Hello";

// 具有相同值的两个 String 对象。
var StringObject1 = new String(string1);
var StringObject2 = new String(string2);

// 比较结果为 true。
if (string1 == string2)
     // 执行某些命令（将要运行的）。

// 比较结果为 false。
if (StringObject1 == StringObject2)
    //执行某些命令（不会运行）。

// 要比较 String 对象的值，
// 用 toString() 或者 valueOf() 方法。
if (StringObject1.valueOf() == StringObject2)
     //执行某些命令（将要运行的）。


运算符优先级 (JScript)

JScript

运算符优先级

JScript 中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有较高优先级的运算符先于较低优先级的运算符执行。例如，乘法的执行先于加法。

下表按从最高到最低的优先级列出 JScript 运算符。具有相同优先级的运算符按从左至右的顺序求值。

运算符 | 描述
. [] () | 字段访问、数组下标、函数调用以及表达式分组
++ — - ~ ! delete new typeof void | 一元运算符、返回数据类型、对象创建、未定义值
* / % | 乘法、除法、取模
+ - + | 加法、减法、字符串连接
<< >> >>> | 移位
< <= > >= instanceof | 小于、小于等于、大于、大于等于、instanceof
== != === !== | 等于、不等于、严格相等、非严格相等
& | 按位与
^ | 按位异或
| | 按位或
&& | 逻辑与
|| | 逻辑或
?: | 条件
= oP= | 赋值、运算赋值
, | 多重求值

圆括号可用来改变运算符优先级所决定的求值顺序。这意味着圆括号中的表达式应在其用于表达式的其余部分之前全部被求值。

例如：

z = 78 * (96 + 3 + 45)

在该表达式中有五个运算符： =, *, (), +, 以及另一个 +。根据运算符优先级的规则，它们将按下面的顺序求值： (), +, +, *, =。

  1. 首先对圆括号内的表达式求值。圆括号中有两个加法运算符。因为两个加法运算符具有相同的优先级，从左到右求值。先将 96 和 3 相加，然后将其和与 45 相加，得到的结果为 144。
  2. 然后是乘法运算。78 乘以 144，得到结果为 11232。
  3. 最后是赋值运算。将 11232 赋给 z。


控制程序的流程

Jscript 脚本中的语句一般是按照写的顺序来运行的。这种运行称为顺序运行，是程序流的默认方向。

与顺序运行不同，另一种运行将程序流转换到脚本的另外的部分。也就是，不按顺序运行下一条语句，而是运行另外的语句。

要使脚本可用，该控制的转换必须以逻辑方式执行。程序控制的转换是基于一个“决定”，这个“决定”结果是真或假（返回 Boolean 型 true 或 false）。创建一个表达式，然后测试其是否为真。主要有两种程序结构实现本功能。

第一种是选择结构。用来指明两种程序流方向，在程序中创建一个交叉点（像岔路）。在 Jscript 中有四种选择结构可用。

  • 单一选择结构（if），
  • 二路选择结构（if/else），
  • 内联三元运算符 ?:
  • 多路选择结构（switch）。

第二种类型的程序控制结构是循环结构。使用循环结构来指明当某些条件保持为真时要重复的动作。当控制语句的条件得到满足时（通常在某些迭代的特定数字后），控制跳过循环结构传递到下条语句。在 Jscript 中有四种循环结构可用。

  • 在循环的开头测试表达式（while），
  • 在循环的末尾测试表达式（do/while），
  • 对对象的每个属性都进行操作（for/in），
  • 由计数器控制的循环（for）。

通过嵌套和堆栈选择、循环控制结构，可以创建相当复杂的脚本。

第三种形式的结构程序流由意外处理给出，本文档不作讨论。

使用条件语句

JScript 支持 if 和 if...else 条件语句。在 if 语句中将测试一个条件，如果该条件满足测试，执行相关的 JScript 编码。在 if...else 语句中，如果条件不满足测试，则将执行不同的代码。最简单的 if 语句格式可以在一行中写完，不过更常见的是多行的 if 和 if...else 语句。

下述示例演示了使用 if 和 if...else 语句的各种可能的语法。第一个示例演示了最简单的布尔测试。当（且仅当）括号之间的项的值为（或者可被强制转换为） true 时，if 后续的语句或语句块才会被执行。

// smash() 函数是在该代码的其他地方定义的。
// 布尔测试，看 newShip 是否为 true。
if (newShip)
   smash(champagneBottle,bow);

// 在本示例中，除非两个条件都为真，否则该测试将不会被满足。
if (rind.color == "deep yellow " && rind.texture == "large and small wrinkles")
{
   theResponse = ("Is it a Crenshaw melon?");
}

// 在本示例中，只要任何一个条件为真，则测试即会满足。
var theReaction = "";
if ((dayOfWeek == "Saturday") || (dayOfWeek == "Sunday"))
{
   theReaction = ("I'm off to the beach!");
}
else
{
   theReaction = ("Hi ho, hi ho, it's off to work I go!");
}

条件运算符

JScript 也支持隐式的条件格式。该格式在要测试的条件后使用一个问号（而不是在条件前的 if ）。它也指定两个可选项，一个在满足条件时使用，另一个在条件不满足时使用。这两个选择项之间必须用一个冒号隔开。

var hours = "";

// 下面的代码指定 hours 是包含 theHour 的内容，
// 还是包含 theHour - 12 的内容。

hours += (theHour >= 12) ? " PM" : " AM";

如果要一起测试多个条件，并且知道某个条件比其他条件更可能满足或不满足测试，可以使用称为“短路计算”的特性来加速脚本的运行速度。当 JScript 计算逻辑表达式时，只计算要得到结果所需的子表达式。

例如，如果有一个“与”表达式，如 ((x == 123) && (y == 42))，Jscript 首先检查 x 是否为 123。如果不是，即使 y 等于 42，整个表达式的值也不可能为 true。因此，并不对 y 作测试，Jscript 返回 false 值。

类似地，如果多个条件中只要有一个为真（使用 || 运算符），则当任何一个条件满足该测试时测试则停止。如果要测试的条件包括函数调用或其他复合表达式，这种处理方式就有效。出于此种想法，写 OR 表达式时，先写最有可能为 true 的条件。写 AND 表达式时，先写最有可能为 false 的条件。

以这种方式设计脚本的好处是：在下例中如果 runfirst() 返回 0 或 false， 则不会运行 runsecond()。

if ((runfirst() == 0) || (runsecond() == 0)) {
    // 若干代码。
}

使用循环

有多种方式来重复执行一条语句或语句块。通常重复执行被称为循环或重复。重复只是循环的一个运行。典型情况是用一个变量测试来进行控制，每执行一次循环变量的取值都会更改。JScript 支持四种循环：for 循环、for...in 循环、while 循环、do...while循环。

使用 for 循环

for 语句指定了一个计数器变量，一个测试条件，以及更新该计数器的操作。在每次循环的重复之前，都将测试该条件。如果测试成功，将运行循环中的代码。如果测试不成功，不运循环中的代码，程序继续运行紧跟在循环后的第一行代码。在执行该循环后，计算机变量将在下一次循环之前被更新。

如果循环条件永不会满足，则不执行该循环。如果测试条件始终满足，则将导致无限循环。在有些情况下，前者可能是合乎需要的，而后者几乎没有用处，因此在编写循环条件时一定要注意。

/*
更新表达式 （下例中的 "icount++"）将在循环结束时被执行，
即在构成循环主体的语句块被执行后，
在测试条件之前。
*/

var howFar = 10;  // 将循环次数限制为 10。

var sum = new Array(howFar);  // 创建一个称为 sum 并具有 10 个成员的数组，这 10 个成员从 0 到 9。
var theSum = 0;
sum[0] = 0;

for(var icount = 0; icount < howFar; icount++)  {        // 在本例中将从 0 到 9 进行计数。
theSum += icount;
sum[icount] = theSum;
}

var newSum = 0;
for(var icount = 0; icount > howFar; icount++)  {        // 该循环根本不会被执行，因为 icount 不大于 howFar。
newSum += icount;
}

var sum = 0;
for(var icount = 0; icount >= 0; icount++)  {        // 这是一个无限循环。
sum += icount;
}

使用 for...in 循环

JScript 提供了一种特别的循环方式来遍历一个对象的所有用户定义的属性或者一个数组的所有元素。for...in 循环中的循环计数器是一个字符串，而不是数字。它包含当前属性的名称或者当前数组元素的下标。

下面的代码范例应在 Internet 浏览器中运行，因为它使用 alert 方法，该方法不属于 Jscript。

// 创建具有某些属性的对象
var myObject = new Object();
myObject.name = "James";
myObject.age = "22";
myObject.phone = "555 1234";

// 枚举（循环）对象的所有属性
for (prop in myObject)
{
    // 显示 "The property 'name' is James"，等等。
    window.alert("The property '" + prop + "' is " + myObject[prop]);
}

尽管 for...in 循环看起来像 VBScript 的 For Each...Next 循环，其实并不一样。JScript 的 for...in 循环重复Jscript 对象所有的属性。VBScript 的 For Each...Next 循环重复集合中的所有项目。要循环 JScript 中的所有集合，需要用 Enumerator 对象。尽管某些对象（像 Internet 浏览器中的那些）支持 VBScript 的 For Each...Next 和 Jscript 的 for...in 循环，但多数对象并不都支持。

使用 while 循环

while 循环相似于 for 循环。其不同之处是 while 循环没有内置的计数器或更新表达式。如果希望控制语句或语句块的循环执行，需要不只是“运行该代码 n 次”，而是更复杂的规则，用 while 循环。下面的示例使用 Internet 浏览器对象模型和 while 循环来询问用户一个简单的问题。

var x = 0;
while ((x != 42) && (x != null))
{
    x = window.prompt("What is my favourite number?", x);
}

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");
注意 由于 while 循环没有显式的内置计数器变量，因此比其他类型的循环更容易产生无限循环。此外，由于不易发现循环条件是在何时何地被更新的，很容易编写一个实际上从不更新条件的 while 循环。因此在编写 while 循环时应特别小心。

同上面所提到的，在 JScript 中还有 do...while 循环与 while 循环相似，不同处在于它总是至少运行一次，因为是在循环的末尾检查条件，而不是在开头。例如，上面的循环可以被改写为：

var x = 0;
do
{
    x = window.prompt("What is my favourite number?", x);
} while ((x != 42) && (x != null));

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");

使用 break 和 continue 语句

在 Microsoft Jscript 中当某些条件得到满足时，用 break 语句来中断一个循环的运行。（请注意，也用 break 语句退出一个 switch 块。）。如果是一个 for 或者 for...in 循环，在更新计数器变量时使用 continue 语句越过余下的代码块而直接跳到下一个循环中。

下面的例子基于前面的示例用 break 和 continue 语句控制循环。

var x = 0;
do
{
    x = window.prompt("What is my favourite number?", x);

    // 判断用户是否选择取消？如果是，退出循环。
    if (x == null)
        break;

    // 是否输入一个数？
    // 如果是则无需要求输入一个数。
    if (Number(x) == x)
        continue;

    //  要求用户只输入数字。
    window.alert("Please only enter in numbers!");

} while (x != 42)

if (x == null)
    window.alert("You gave up!");
else
    window.alert("Yep - it's the Ultimate Answer!");


JScript 函数

Microsoft Jscript 函数执行操作，也可以返回值。某些时候是计算或比较的结果。函数又被称为“全局方法”。

一个函数中包含有几个操作。这样可使得代码更合理化。可以写一组语句并给其命名，然后通过调用它并传递其需要的信息来运行整组语句。

给函数传递信息可以把信息放在函数名称后面的圆括号中。传递给函数的信息称作参数。某些函数根本不带任何参数，而其他函数带一个或者多个参数。在某些函数中，参数的个数取决于如何使用该函数。

Jscript 支持两种函数：一类是语言内部的函数，另一类是自己创建的。

特殊的内部函数

Jscript 语言包含很多内部函数。某些函数可以操作表达式和特殊字符，而其他函数将字符串转换为数值。一个有用的内部函数是 eval()。该函数可以对以字符串形式表示的任意有效的 Jscript代码求值。eval() 函数有一个参数，该参数就是想要求值的代码。下面给出一个使用本函数的示例。

var anExpression = "6 * 9 % 7";
var total = eval(anExpression); // 将变量 total 赋值为 5。
var yetAnotherExpression = "6 * (9 % 7)";
total = eval(yetAnotherExpression) // 将变量 total 赋值为 12。
// 将一个字符串赋给 totality （注意嵌套引用）
var totality = eval("'...surrounded by acres of clams.'");

有关内部函数的详细信息请参考语言参考。

创建自己的函数

在必要的时候，可以创建并使用自己的函数。一个函数的定义中包含了一个函数语句和一个 Jscript 语句块。

下面示例中的 Checktriplet 函数以三角形的边长为参数。通过查看三条边的长度是否可以组成一个毕达哥拉斯三元组（直角三角形斜边长度的平方等于其他两条边长的平方和）来计算该三角形是否为直角三角形。实际测试时 checkTriplet 函数要调用另两个函数中的一个函数。

注意在浮点数测试版本中极小数（“epsilon”）作为测试变量的使用。由于浮点运算的不确定性和舍入误差，除非问题中的三个值均已知为整数，直接测试这三个数是否组成毕达哥拉斯三元组是不可行的。因为直接的测试更为准确，本示例中的代码确定其是否可行，如果可行则使用它。

var epsilon = 0.00000000001; // 一些需要测试的极小数字。

// 测试整数的函数。
function integerCheck(a, b, c)
{
   // 测试。
   if ( (a*a) == ((b*b) + (c*c)) )
      return true;

   return false;
} // 整数检查函数的结尾。

// 测试浮点数的函数。
function floatCheck(a, b, c)
{
   // 得到测试数值。
   var delta = ((a*a) - ((b*b) + (c*c)))

   // 测试需要绝对值
   delta = Math.abs(delta);

   // 如果差小于 epsilon，那么它相当接近。
   if (delta < epsilon)
      return true;

   return false;
} // 浮点检查函数的末尾。

// 三元检查。
function checkTriplet(a, b, c)
{
   // 创建临时变量，用于交换值
   var d = 0;

   // 先将最长的移动到位置“a”。

   // 需要的话交换 a 和 b
   if (b > a)
   {
      d = a;
      a = b;
      b = d;
   }

   // 需要的话交换 a 和 c
   if (c > a)
   {
      d = a;
      a = c;
      c = d;
   }

   // 测试全部的 3 个值，看其是否为整数？
   if (((a % 1) == 0) && ((b % 1) == 0) && ((c % 1) == 0))
   {
      // 如果成立，使用精确检查。
      return integerCheck(a, b, c);
   }
   else
   {
      // 如果不成立，取尽可能相近的。
      return floatCheck(a, b, c);
   }
} // 三元检查函数的末尾。

// 下面的三个语句赋给范例值，用于测试。
var sideA = 5;
var sideB = 5;
var sideC = Math.sqrt(50.001);

// 调用函数。调用后，'result' 中包含了结果。
var result = checkTriplet(sideA, sideB, sideC);


JScript 对象

Jscript 对象是属性和方法的集合。一个方法就是一个函数，是对象的成员。属性是一个值或一组值（以数组或对象的形式），是对象的成员。Jscript 支持四种类型的对象：内部对象、生成的对象、宿主给出的对象（如 Internet 浏览器中的 window 和 document）以及 ActiveX 对象（外部组件）。

作为数组的对象

在 Jscript 中，对象和数组几乎是以相同的方式处理的。对象和数组均可以被赋予任意值，实际上数组只是一种特殊的对象。数组和对象的区别在于数组有一个“奇妙的” length 属性，而对象没有。这意味着可以给数组的一个元素赋予比其他元素更大的值。例如，myArray[100] = "hello"，然后 length 属性将自动地被更新为 101（新长度）。同样，如果修改数组的 length 属性，将删除不再是数组部分的元素。

Jscript 中所有的对象均支持“expando”属性或那些可以在运行时动态添加和删除的属性。这些属性可以有包含数字的任意名称。如果属性的名称是简单的标识符<<参考标识符规则>>，可以在对象名称的后面加句点，例如：

var myObj = new Object();

// 添加两个 expando 属性，'name' 和 'age'
myObj.name = "Fred";
myObj.age = 42;

如果属性名称不是一个简单的标识符，或者在写脚本的时候不知道，可以在方括号中使用任意表达式来索引属性。在 Jscript 中所有 expando 属性的名称在被添加到对象之前被转换为字符串。

var myObj = new Object();

// 添加两个无法写在 object.property 语
// 法中的 expando 属性。
// 第一个属性包含无效字符（空格），
// 所以必须写在方括号里。
myObj["not a valid identifier"] = "This is the property value";

// 第二个 expando 名称是一个数字，
// 所以也必须写在方括号里。
myObj[100] = "100";

传统的作法是赋给数组元素以 0 开始的数字索引。这些数组元素与 length 属性相交互。然而，由于所有的数组也是对象，也支持 expando 属性。请注意，虽然如此，expando 属性并不以任何方式与 length 属性相交互。例如：

// 三个元素的数组
var myArray = new Array(3);

// 添加数据
myArray[0] = "Hello";
myArray[1] = 42;
myArray[2] = new Date(2000, 1, 1);

// 显示数组的长度 3
window.alert(myArray.length);

// 添加某些 expando 属性
myArray.expando = "JScript!";
myArray["another Expando"] = "Windows";

// 仍然显示 3，因为两个 expando 属性
// 并不影响长度。
window.alert(myArray.length);

虽然 Jscript 并不直接支持多维数组，但是可以在数组元素中存储任意种类的数据（包含其他数组）。所以通过在另一个数组的元素里存储其他数组可以得到多维数组的特性。例如，下面的代码为最大为 5 的数字建立了乘法表：

// 若是更大的表请改变本数
var iMaxNum = 5;
// 循环计数
var i, j;

// 新数组。由于数组从 0 开始计数，
// 而不是 1，所以数组大小为 iMaxNum + 1。
var MultiplicationTable = new Array(iMaxNum + 1);

// 为每个主要的数做循环（表中的每一行）
for (i = 1; i <= iMaxNum; i++)
{
    // 生成表中的列
    MultiplicationTable[i] = new Array(iMaxNum + 1);

    // 将乘法的结果存在行中
    for (j = 1; j <= iMaxNum; j++)
    {
        MultiplicationTable[i][j] = i * j;
    }
}

window.alert(MultiplicationTable[3][4]); // 显示 12
window.alert(MultiplicationTable[5][2]); // 显示 10
window.alert(MultiplicationTable[1][4]); // 显示 4


创建自己的对象

要创建自己的对象实例，必须首先为其定义一个构造函数。构造函数创建一个新对象，赋予对象属性，并在合适的时候赋予方法。例如，下面的示例为 pasta 对象定义了构造函数。注意 this 关键字的使用，它指向当前对象。

// pasta 是有四个参数的构造器。
function pasta(grain, width, shape, hasEgg)
{
    // 是用什么粮食做的？
    this.grain = grain;

    // 多宽？（数值）
    this.width = width;

    // 横截面形状？（字符串）
    this.shape = shape;

    // 是否加蛋黄？（boolean）
    this.hasEgg = hasEgg;
}

定义了对象构造器后，用 new 运算符创建对象实例。

var spaghetti = new pasta("wheat", 0.2, "circle", true);
var linguine = new pasta("wheat", 0.3, "oval", true);

可以给对象实例添加属性以改变该实例，但是用相同的构造器生成的其他对象定义中并不包括这些属性，而且除非你特意添加这些属性那么在其他实例中并不显示出来。如果要将对象所有实例的附加属性显示出来，必须将它们添加到构造函数或构造器原型对象（原型在高级文档中讨论）中。

// spaghetti 的附加属性。
spaghetti.color = "pale straw";
spaghetti.drycook = 7;
spaghetti.freshcook = 0.5;

var chowFun = new pasta("rice", 3, "flat", false);
// chowFun 对象或其他现有的 pasta 对象
// 都没有添加到 spaghetti 对象
// 的三个新属性。

// 将属性‘foodgroup’加到 pasta 原型对象
// 中，这样 pasta 对象的所有实例都可以有该属性，
// 包括那些已经生成的实例。
pasta.prototype.foodgroup = "carbohydrates"

// 现在 spaghetti.foodgroup、chowFun.foodgroup，等等
// 均包含值“carbohydrates”。

在定义中包含方法

可以在对象的定义中包含方法（函数）。一种方法是在引用别处定义的函数的构造函数中添加一个属性。例如，下面的示例扩充上面定义的 pasta 构造函数以包含 toString 方法，该方法将在显示对象的值时被调用。

// pasta 是有四个参数的构造器。
// 第一部分与上面相同。
function pasta(grain, width, shape, hasEgg)
{
    // 用什么粮食做的？
    this.grain = grain;

    // 多宽？（数值）
    this.width = width;

    // 横截面形状？（字符串）
    this.shape = shape;

    // 是否加蛋黄？（boolean）
    this.hasEgg = hasEgg;

    // 这里添加 toString 方法（如下定义）。
    // 注意在函数的名称后没有加圆括号；
    // 这不是一个函数调用，而是
    // 对函数自身的引用。
    this.toString = pastaToString;
}

// 实际的用来显示 past 对象内容的函数。
function pastaToString()
{
    // 返回对象的属性。

    return "Grain: " + this.grain + "\n" +
        "Width: " + this.width + "\n" +
        "Shape: " + this.shape + "\n" +
        "Egg?: " + Boolean(this.hasEgg);
}

var spaghetti = new pasta("wheat", 0.2, "circle", true);
// 将调用 toString() 并显示 spaghetti 对象
// 的属性（需要 Internet 浏览器）。
window.alert(spaghetti);


内部对象

Microsoft Jscript 提供了 11 个内部（或“内置”）对象。它们是Array、Boolean、Date、Function、Global、Math、Number、Object、RegExp、Error 以及 String 对象。每一个对象有相关的方法和属性，这在语言参考中有详细的描述。本节中也描述了某些对象。

Array 对象

数组下标可以被认为是对象的属性，它是通过数字索引来引用的。注意添加到数组中的已命名的属性不能通过数字来索引；它们是与数组元素分离的。

使用 new 运算符和 Array() 构造器生成一个新的数组，如下面的示例。

var theMonths = new Array(12);
theMonths[0] = "Jan";
theMonths[1] = "Feb";
theMonths[2] = "Mar";
theMonths[3] = "Apr";
theMonths[4] = "May";
theMonths[5] = "Jun";
theMonths[6] = "Jul";
theMonths[7] = "Aug";
theMonths[8] = "Sep";
theMonths[9] = "Oct";
theMonths[10] = "Nov";
theMonths[11] = "Dec";

用关键字 Array 生成数组时，Jscript 包含了 length 属性，该属性记录了数组入口数。如果没有给该属性指定值，则设置长度为 0 且数组没有入口点。如果指定一个数值，则将长度设置为该数。如果指定了不止一个参数，则这些参数被用作数组的入口。另外，参数的数目被赋给 length 属性。如下面的示例与前一个示例是等价的。

var theMonths = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec");

当向用关键字 Array 生成的数组中添加元素时，Jscript 自动改变属性 length 的值。Jscript 中的数组索引总是以 0 开始，而不是 1，所以属性 length 通常比数组的最大索引大 1。

String 对象

在 Jscript 中，可以将字符串（和数）当作对象来处理。string 对象有一些内置方法，可以和自己的字符串一起使用。其中一个是 substring 方法，它返回字符串的一部分。该方法以两个数字作为参数。

aString = "0123456789";
var aChunk = aString.substring(4, 7);  // 将 aChunk 设为 "456"。
var aNotherChunk = aString.substring(7, 4);  // 将 aNotherChunk 设为 "456"。
// 使用上面生成数组的示例：
firstLetter = theMonths[5].substring(0,1);  // 将变量 firstLetter 设为“J”。

String 对象的另一个属性是 length 属性。本属性包含了字符串中的字符数（空字符串为 0）。它是一个数值，可以直接在计算中使用。

var howLong = "Hello World".length  // 设置变量 howLong 为 11。

Math 对象

Math 对象有许多预定义属性和方法。属性是特殊的数字。这些特殊的数字之一是 pi 值（近似 3.14159…）。这是 Math.PI 属性，如下例所示。

// 声明一个半径变量并赋数值。
var circleArea = Math.PI * radius * radius;  // 注意 Math 和 PI 大写。

Math 对象的一个内置方法是乘幂方法（或 pow），使用该方法求得指定数的幂次。下面的例子同时使用了 pi 和乘幂。

// 本公式计算给定半径的球体的体积。
volume = (4/3)*(Math.PI*Math.pow(radius,3));

Date 对象

Date 对象可以被用来表示任意的日期和时间，获取当前系统日期以及计算两个日期的间隔。它拥有一些预定义的属性和方法。通常，Date 对象给出星期；月份，天数和年份；以及以小时，分钟和秒表示的时间。该信息是基于 1970 年1 月 1 日 00:00:00.000 GMT 开始的毫秒数，其中 GMT 是格林威治标准时间（首选术语是 UTC，或者“全球标准时间”，它引用的信号是由“世界时间标准”发布的）。Jscript 可以处理 250,000 B.C. 到 255,000 A.D范围内的日期。

使用 new 运算符创建一个新的 Date 对象。下面的示例计算当年已过去的天数和今年剩下的天数。

/*
本示例使用前面定义的月份名称数组。
第一条语句以“Day Month Date 00:00:00 Year”格式
对 thisIsToday 变量赋值。
*/
var thisIsToday = new Date();

var toDay = new Date();  //获取今天的日期。

// 提取年，月，日。
var thisYear = toDay.getFullYear();
var thisMonth = theMonths[toDay.getMonth()];
var thisDay = thisMonth  + " " + toDay.getDate() + ", " + thisYear;

Number 对象

除了 Math 对象中可用的特殊数值属性（例如 PI）外，在 Microsoft Jscript 中， Number 对象有几个其他的数值属性。

属性 | 描述
MAX_VALUE | 可能的最大数大约为 1.79E+308；可以是正数或负数。（具体数值随系统不同而有微小差别。）
MIN_VALUE | 可能的最小数大约为 2.22E-308；可以是正数或负数。（具体数值随系统不同而有微小差别。）
NaN | 特殊非数量值，“不是数值”。
POSITIVE_INFINITY | 比最大正数（Number.MAX_VALUE）还要大的任意正值自动被转换为此值，代表正无穷大。
NEGATIVE_INFINITY | 比最小的负数（负的 Number.MAX_VALUE）还小的任意值被自动转换为此值，代表负无穷。

Number.NaN 是一个特殊的属性，被定义为“不是数值”。例如被 0 除返回 NaN。试图解析一个无法被解析为数字的字符串同样返回 Number.NaN。把 NaN 与任何数值或本身作比较的结果都是不相等。不能通过与 Number.NaN 比较来测试 NaN 结果，而应该使用 isNaN() 函数。


Jscript 保留字

Jscript 有一些保留字不能在标识符中使用。保留字对 Jscript 语言有特殊的含义，它们是语言语法的一部分。使用保留字在加载脚本的时候将产生编译错误。

Jscript 还有一些留作将来使用的保留字。这些字不是现在的 Jscript 语言的一部分，然而它们是为将来的使用保留的。

保留字

break | delete | function | return | typeof
case | do | if | switch | var
catch | else | in | this | void
continue | false | instanceof | throw | while
debugger | finally | new | true | with
default | for | null | try |

将来的保留字

abstract | double | goto | native | static
boolean | enum | implements | package | super
byte | export | import | private | synchronized
char | extends | int | protected | throws
class | final | interface | public | transient
const | float | long | short | volatile

当选择标识符时避免使用已经在内部 Jscript 对象或函数中使用的词，如 String 或 parseInt。


高级 JScript

创建高级对象

递归

变量范围

复制、传递和比较数据

使用数组

特殊字符

脚本问题解答


创建高级对象

构造函数是一个函数，调用它来例示并初始化特殊类型的对象。可以使用 new 关键字来调用一个构造函数。下面给出了使用构造函数的新示例。

var myObject = new Object();             // 创建没有属性的通用对象。
var myBirthday = new Date(1961, 5, 10);  // 创建一个 Date 对象。
var myCar = new Car();                   // 创建一个用户定义的对象，并初始化其属性。

通过构造函数将一个参数作为特定的 this 关键字的值传递给新创建的空对象。然后构造函数负责为新对象执行适应的初始化（创建属性并给出其初始值）。完成后，构造函数返回它所构造的对象的一个参数。

编写构造函数

可以使用 new 运算符结合像 Object()、Date() 和 Function() 这样的预定义的构造函数来创建对象并对其初始化。面向对象的编程其强有力的特征是定义自定义构造函数以创建脚本中使用的自定义对象的能力。创建了自定义的构造函数，这样就可以创建具有已定义属性的对象。下面是自定义函数的示例（注意 this 关键字的使用）。

function Circle (xPoint, yPoint, radius) {
    this.x = xPoint;  // 圆心的 x 坐标。
    this.y = yPoint;  // 圆心的 y 坐标。
    this.r = radius;  // 圆的半径。
}

调用 Circle 构造函数时，给出圆心点的值和圆的半径（所有这些元素是完全定义一个独特的圆对象所必需的）。结束时 Circle 对象包含三个属性。下面是如何例示 Circle 对象。

var aCircle = new Circle(5, 11, 99);

使用原型来创建对象

在编写构造函数时，可以使用原型对象（它本身是所有构造函数的一个属性）的属性来创建继承属性和共享方法。原型属性和方法将按引用复制给类中的每个对象，因此它们都具有相同的值。可以在一个对象中更改原型属性的值，新的值将覆盖默认值，但仅在该实例中有效。属于这个类的其他对象不受此更改的影响。下面给出了使用自定义构造函数的示例，Circle（注意 this 关键字的使用）。

Circle.prototype.pi = Math.PI;
function ACirclesArea () {
    return this.pi * this.r * this.r; // 计算圆面积的公式为 Πr²。
}
Circle.prototype.area = ACirclesArea; // 计算圆面积的函数现在是 Circle Prototype 对象的一个方法。
var a = ACircle.area();               // 此为如何在 Circle 对象上调用面积函数。

使用这个原则，可以给预定义的构造函数（都具有原型对象）定义附加属性。例如，如果想要能够删除字符串的前后空格（与 VBScript 的 Trim 函数类似），就可以给 String 原型对象创建自己的方法。

// 增加一个名为 trim 的函数作为
// String 构造函数的原型对象的一个方法。
String.prototype.trim = function()
{
    // 用正则表达式将前后空格
    // 用空字符串替代。
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

// 有空格的字符串
var s = "    leading and trailing spaces    ";

// 显示 "    leading and trailing spaces     (35)"
window.alert(s + " (" + s.length + ")");

// 删除前后空格
s = s.trim();
// 显示"leading and trailing spaces (27)"
window.alert(s + " (" + s.length + ")");


递归

递归是一种重要的编程技术。该方法用于让一个函数从其内部调用其自身。一个示例就是计算阶乘。0 的阶乘被特别地定义为 1。更大数的阶乘是通过计算 1 * 2 * ...来求得的，每次增加 1，直至达到要计算其阶乘的那个数。

下面的段落是用文字定义的计算阶乘的一个函数。

“如果这个数小于零，则拒绝接收。如果不是一个整数，则将其向下舍入为相邻的整数。如果这个数为 0，则其阶乘为 1。如果这个数大于 0，则将其与相邻较小的数的阶乘相乘。”

要计算任何大于 0 的数的阶乘，至少需要计算一个其他数的阶乘。用来实现这个功能的函数就是已经位于其中的函数；该函数在执行当前的这个数之前，必须调用它本身来计算相邻的较小数的阶乘。这就是一个递归示例。

递归和迭代（循环）是密切相关的 — 能用递归处理的算法也都可以采用迭代，反之亦然。确定的算法通常可以用几种方法实现，您只需选择最自然贴切的方法，或者您觉得用起来最轻松的一种即可。

显然，这样有可能会出现问题。可以很容易地创建一个递归函数，但该函数不能得到一个确定的结果，并且不能达到一个终点。这样的递归将导致计算机执行一个“无限”循环。下面就是一个示例：在计算阶乘的文字描述中遗漏了第一条规则（对负数的处理） ，并试图计算任何负数的阶乘。这将导致失败，因为按顺序计算 -24 的阶乘时，首先不得不计算 -25 的阶乘；然而这样又不得不计算 -26 的阶乘；如此继续。很明显，这样永远也不会到达一个终止点。

因此在设计递归函数时应特别仔细。如果怀疑其中存在着无限递归的可能，则可以让该函数记录它调用自身的次数。如果该函数调用自身的次数过多（无论您决定调用多少次），它就会自动退出。

下面仍然是阶乘函数，这次是用 JScript 代码编写的。

// 计算阶乘的函数。如果传递了
// 无效的数值（例如小于零），
// 将返回 -1，表明发生了错误。若数值有效，
// 把数值转换为最相近的整数，并
// 返回阶乘。
function factorial(aNumber)  {
aNumber = Math.floor(aNumber);  // 如果这个数不是一个整数，则向下舍入。
if (aNumber < 0)  {  // 如果这个数小于 0，拒绝接收。
    return -1;
    }
      if (aNumber == 0)  {  // 如果为 0，则其阶乘为 1。
      return 1;
      }
        else return (aNumber * factorial(aNumber - 1));  // 否则，递归直至完成。
}


变量范围

JScript 有两种变量范围：全局和局部。如果在任何函数定义之外声明了一个变量，则该变量为全局变量，且该变量的值在整个持续范围内都可以访问和修改。如果在函数定义内声明了一个变量，则该变量为局部变量。每次执行该函数时都会创建和破坏该变量；且它不能被该函数外的任何事物访问。

像 C++ 这样的语言也有“块范围”。在这里，任何一对“{}”都定义新的范围。JScript 不支持块范围。

一个局部变量的名称可以与某个全局变量的名称相同，但这是完全不同和独立的两个变量。因此，更改一个变量的值不会影响另一个变量的值。在声明局部变量的函数内，只有该局部变量有意义。

var aCentaur = "a horse with rider,";  // aCentaur 的全局定义。

// JScript 代码，为简洁起见有省略。
function antiquities()  // 在这个函数中声明了一个局部 aCentaur 变量。
{

// JScript 代码，为简洁起见有省略。
var aCentaur = "A centaur is probably a mounted Scythian warrior";

// JScript 代码，为简洁起见有省略。
aCentaur += ", misreported; that is, ";  // 添加到局部变量。

// JScript 代码，为简洁起见有省略。
}  // 函数结束。

var nothinginparticular = antiquities();
aCentaur += " as seen from a distance by a naive innocent.";

/*
在函数内，该变量的值为 "A centaur is probably a mounted Scythian warrior,
misreported; that is, "；在函数外，该变量的值为这句话的其余部分：
"a horse with rider, as seen from a distance by a naive innocent."
*/

很重要的一点是注意变量是否是在其所属范围的开始处声明的。有时这会导致意想不到的情况。

tweak();
var aNumber = 100;
function tweak()  {
var newThing = 0;  // 显式声明 newThing 变量。

    // 本语句将未定义的变量赋给 newThing，因为已有名为 aNumber 的局部变量。
    newThing = aNumber;

    //下一条语句将值 42 赋给局部的 aNumber。aNumber = 42;
if (false)  {
    var aNumber;  // 该语句永远不会执行。
    aNumber = 123;  //  该语句永远不会执行。
    }  // 条件语句结束。

}  // 该函数定义结束。

当 JScript 运行函数时，首先查找所有的变量声明，

var someVariable;

并以未定义的初始值创建变量。如果变量被声明时有值，

var someVariable = "something";

那么该变量仍以未定义的值初始化，并且只有在运行了声明行时才被声明值取代，假如曾经被声明过。

JScript 在运行代码前处理变量声明，所以声明是位于一个条件块中还是其他某些结构中无关紧要。JScript 找到所有的变量后立即运行函数中的代码。如果变量是在函数中显式声明的 — 也就是说，如果它出现于赋值表达式的左边但没有用 var 声明 — 那么将把它创建为全局变量。


复制、传递和比较数据

在 JScript 中，对数据的处理取决于该数据的类型。

按值和按引用的比较

Numbers 和 Boolean 类型的值 (true 和 false) 是按值来复制、传递和比较的。当按值复制或传递时，将在计算机内存中分配一块空间并将原值复制到其中。然后，即使更改原来的值，也不会影响所复制的值（反过来也一样），因为这两个值是独立的实体。

对象、数组以及函数是按引用来复制、传递和比较的。当按地址复制或传递时，实际是创建一个指向原始项的指针，然后就像拷贝一样来使用该指针。如果随后更改原始项，则将同时更改原始项和复制项（反过来也一样）。实际上只有一个实体；“复本”并不是一个真正的复本，而只是该数据的又一个引用。

当按引用比较时，要想比较成功，两个变量必须参照完全相同的实体。例如，两个不同的 Array 对象即使包含相同的元素也将比较为不相等。要想比较成功，其中一个变量必须为另一个的参考。要想检查两个数组是否包含了相同的元素，比较 toString() 方法的结果。

最后，字符串是按引用复制和传递的，但是是按值来比较的。请注意，假如有两个 String 对象（用 new String("something") 创建的），按引用比较它们，但是，如果其中一个或者两者都是字符串值的话，按值比较它们。

注意 鉴于 ASCII 和 ANSI 字符集的构造方法，按序列顺序大写字母位于小写字母的前面。例如 "Zoo" 小于 "aardvark"。如果想执行不区分大小写的匹配，可以对两个字符串调用 toUpperCase() 或 toLowerCase()。

传递参数给函数

按值传递一个参数给函数就是制作该参数的一个独立复本，即一个只存在于该函数内的复本。即使按引用传递对象和数组时，如果直接在函数中用新值覆盖原先的值，在函数外并不反映新值。只有在对象的属性或者数组的元素改变时，在函数外才可以看出。

例如（使用 IE 对象模式）：

// 本代码段破坏（覆盖）其参数，所以
// 调用代码中反映不出变化。
function Clobber(param)
{
    // 破坏参数；在调用代码中
    // 看不到。
    param = new Object();
    param.message = "This will not work";
}

// 本段代码改变参数的属性，
// 在调用代码中可看到属性改变。
function Update(param)
{
    // 改变对象的属性；
    // 可从调用代码中看到改变。
    param.message = "I was changed";
}

// 创建一个对象，并赋给一个属性。
var obj = new Object();
obj.message = "This is the original";

// 调用 Clobber，并输出 obj.message。注意，它没有发生变化。
Clobber(obj);
window.alert(obj.message); // 仍然显示 "This is the original"。

// 调用 Update，并输出 obj.message。注意，它已经被改变了。
Update(obj);
window.alert(obj.message); // 显示 "I was changed"。

检验数据

当按值进行检验时，是比较两个截然不同的项以查看它们是否相等。通常，该比较是逐字节进行的。当按引用进行检验时，是看这两项是否是指向同一个原始项的指针。如果是，则比较结果是相等；如果不是，即使它们每个字节都包含完全一样的值，比较结果也为不相等。

按引用复制和传递字符串能节约内存；但是由于在字符串被创建后不能进行更改，因此可以按值进行比较。这样可以检查两个字符串是否包含相同的内容，即使它们是完全独立产生的。


使用数组

JScript 中的数组是稀疏的。也就是说，如果一个数组具有三个元素，编号分别为 0、1 和 2，您就可以创建元素 50，而不必担心从 3 到 49 的参数。如果该数组有一个自动的 length 变量，（请参阅内部对象了解有关数组长度的自动监控的说明），该 length 变量被设为 51，而不是 4。当然您可以创建各元素的编号之间没有间隙的数组，不过没有必要这样做。

在 JScript 中，对象和数组几乎相同。两个主要差别是对象没有自动长度属性，而数组没有对象的属性和方法。

数组寻址

使用方括号“[]”来寻址数组。方括号中是一个数值或一个值为整数的表达式。下面的示例假定在脚本的其他地方已定义了entryNum 变量，且已赋值。

theListing = addressBook[entryNum];
theFirstLine = theListing[1];

将对象作为关联数组

通常，使用点运算符“.”访问对象的属性。例如，

myObject.aProperty

在这里，属性名称是一个标识符。也可以用索引运算符“[]”访问对象的属性。在这里，是把对象看作一个关联数组。关联数组是一种数据结构，它可以动态地将任意的数据的值与任意的字符串相关联。例如，

myObject["aProperty"] // 与上面相同。

尽管索引运算符更多地用于访问数组元素，当用于对象时，索引总是以字符串文字表示的属性名称。

注意访问对象属性的两种方法的重要差异。

运算符 | 属性名称作为 | 对属性名称的处理
点“.” | 标识符 | 不能作为数据处理
索引“[]” | 字符串文字 | 能被作为数据处理

在运行之前并不知道属性名称时，这个差异会有用（比如基于用户输入构造对象时）。要想从一个关联数组提取所有的属性，必须用 for … in 循环。


特殊字符 (JScript)

JScript

特殊字符

JScript 提供了一些特殊字符，允许在字符串中包括一些无法直接键入的字符。每个字符都以反斜杠开始。反斜杠是一个转义字符，表示 JScript 解释器下面的字符为特殊字符。

转义序列 | 字符
\b | 退格
\f | 走纸换页
\n | 换行
\r | 回车
\t | 横向跳格 (Ctrl-I)
\' | 单引号
\" | 双引号
\\ | 反斜杠

请注意，由于反斜杠本身用作转义符，因此不能直接在脚本中键入一个反斜杠。如果要产生一个反斜杠，必须一起键入两个反斜杠 (\\)。

document.write('The image path is C:\\webstuff\\mypage\\gifs\\garden.gif.');
document.write('The caption reads, "After the snow of \'97. Grandma\'s house is covered."');


脚本问题解答

如果不够细致，任何编程语言都有一些可能发生错误的地方，而且每种语言都有其特殊之处。例如，对于 null 值： JScript 中这个值与 C 或 C++ 语言中的 Null 值所起的作用是不一样的。

下面提供了一些在编写 JScript 脚本时可能遇到的问题。

语法错误

由于编程语言中的语法比自然语言的语法要严格得多，因此在编写脚本时对细节应倍加关注。例如，如果您本意是将字符串作为某个参数，但是在键入时忘了使用引号引起来，就会产生问题。

脚本解释顺序

对 JScript 的解释是 Web 浏览器的 HTML 语法分析处理的一部分。因此，如果在文档的 <HEAD> 标识中放置了一个脚本，则将在检查所有的 <BODY> 标识之前加以解释。如果在 <BODY> 标识中将创建对象，但由于在分析处理 <HEAD> 标识时这些对象尚不存在，因而不能被脚本操作。

注意 本情况特定于 IE。ASP 和 WSH 具有不同的运行模式（其他宿主亦是）。

自动类型强制

JScript 是一种具有自动强制的自由类型语言。因此，尽管实际上不同类型的值是不相等的，但对下述示例中的表达式求值都将得到 true。

"100" == 100;
false == 0;

要核对类型与值都一致，用“严格相等”运算符（===）。下面两个表达式的值为 false：

"100" === 100;
false === 0;

运算符优先级

在对表达式求值时某个特定运算符的执行主要是根据运算符优先级，而不是表达式的位置。因此，在下面的示例中，乘法将先于减法执行，尽管在该表达式中第一个出现的运算符是减法。

theRadius = aPerimeterPoint - theCenterpoint * theCorrectionFactor;

对对象使用 for...in 循环

当使用 for...in 循环对某个对象的属性进行遍历时，不必预先确定或管理将要指定给该循环计数器变量的对象字段的顺序。此外，在该语言的不同实现方案中该顺序可能会不一样。

with 关键字

with 语句可以方便地用来引用某个特定对象中已有的属性，但是不能用来给对象添加属性。要给对象创建新的属性，必须明确地引用该对象。

this 关键字

尽管可以在对象的定义范围内使用 this 关键字来引用该对象本身，但是当函数不是该对象的定义时，就不能象普通情况那样使用 this 或类似的关键字来引用当前的执行函数。如果该函数被指定为某个对象的方法，则可以在该函数内使用 this 关键字来引用该对象。

编写一个脚本，该脚本在 IE 中写脚本

当解释程序遇到 </SCRIPT> 标记时会终止当前脚本。要显示 "</SCRIPT>" 本身，请将其改写为至少两个字符串，例如 "</SCR" 和 "IPT>"，这样就可以在输出语句中将其连接在一起。

IE 中的隐式窗口引用

由于同时可以打开多个窗口，任何隐式的窗口引用都被指向当前窗口。对于其他窗口必须使用显式引用。


条件编译

使用条件编译可以使用 Jscript 语言的新特性并且与不支持该特性的老版本兼容。

用 @cc_on 语句、@if 或 @set 语句来激活条件编译。条件编译的某些典型用途包括使用 Jscript 中的新特性、在脚本中嵌入调试支持以及跟踪代码的运行。

一般将条件编译代码放在注释中，所以不能理解条件编译的宿主（如 Netscape Navigator）就忽略了条件编译。下面是一个示例。

/*@cc_on @*/
/*@if (@_jscript_version >= 4)
   alert("JScript version 4 or better");
   @else @*/
   alert("You need a more recent script engine.");
/*@end @*/

本示例使用了特殊的注释分隔符，该分隔符只有在 @cc_on 语句激活条件编译时才使用。不支持条件编译的脚本引擎只能看到一个需要更新脚本引擎的信息。


条件编译变量

下面是条件编译可用的预定义变量。如果变量不是 true，就不被定义或者作为 NaN 处理。

变量 | 描述
@_win32 | 在 Win32 系统上运行为 true。
@_win16 | 在 Win16 系统上运行为 true。
@_mac | 在 Apple Macintosh 系统上运行为 true。
@_alpha | 在 DEC Alpha 处理器上运行为 true。
@_x86 | 在 Intel 处理器上运行为 true。
@_mc680x0 | 在 Motorola 680x0 处理器上运行为 true。
@_PowerPC | 在 Motorola PowerPC 处理器上运行为 true。
@_jscript | 永远为 true。
@_jscript_build | 包含 Jscript 脚本引擎创建号。
@_jscript_version | 包含以 major、minor 为格式的 Jscript 版本号。


正则表达式简介

这些页包含的信息其目的是提供一个关于正则表达式的通用介绍。

尽管试图让每个主题的内容都比较独立，但这些主题所包含的大部分信息都依赖于对前面所介绍的特性或概念的理解。因此，建议您顺序地仔细阅读这些主题，以便最全面地了解这些材料。

“正则表达式简介”包括下述各个主题：

正则表达式

早期起源

使用正则表达式

正则表达式语法

建立正则表达式

优先级顺序

普通字符

特殊字符

非打印字符

字符匹配

限定符

定位符

选择与编组

向后引用


正则表达式

如果原来没有使用过正则表达式，那么可能对这个术语和概念会不太熟悉。不过，它们并不是您想象的那么新奇。

请回想一下在硬盘上是如何查找文件的。您肯定会使用 ? 和 * 字符来帮助查找您正寻找的文件。? 字符匹配文件名中的单个字符，而 * 则匹配一个或多个字符。一个如 'data?.dat' 的模式可以找到下述文件：

data1.dat
data2.dat
datax.dat
dataN.dat

如果使用 * 字符代替 ? 字符，则将扩大找到的文件数量。'data*.dat' 可以匹配下述所有文件名：

data.dat
data1.dat
data2.dat
data12.dat
datax.dat
dataXYZ.dat

尽管这种搜索文件的方法肯定很有用，但也十分有限。? 和 * 通配符的有限能力可以使你对正则表达式能做什么有一个概念，不过正则表达式的功能更强大，也更灵活。


早期起源

正则表达式的“祖先”可以一直上溯至对人类神经系统如何工作的早期研究。Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络。

1956 年, 一位叫 Stephen Kleene 的数学家在 McCulloch 和 Pitts 早期工作的基础上，发表了一篇标题为“神经网事件的表示法”的论文，引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式，因此采用“正则表达式”这个术语。

随后，发现可以将这一工作应用于使用 Ken Thompson 的计算搜索算法的一些早期研究，Ken Thompson 是 Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的 qed 编辑器。

如他们所说，剩下的就是众所周知的历史了。从那时起直至现在正则表达式都是基于文本的编辑器和搜索工具中的一个重要部分。


使用正则表达式

在典型的搜索和替换操作中，必须提供要查找的确切文字。这种技术对于静态文本中的简单搜索和替换任务可能足够了，但是由于它缺乏灵活性，因此在搜索动态文本时就有困难了，甚至是不可能的。

使用正则表达式，就可以：

  • 测试字符串的某个模式。例如，可以对一个输入字符串进行测试，看在该字符串是否存在一个电话号码模式或一个信用卡号码模式。这称为数据有效性验证。
  • 替换文本。可以在文档中使用一个正则表达式来标识特定文字，然后可以全部将其删除，或者替换为别的文字。
  • 根据模式匹配从字符串中提取一个子字符串。可以用来在文本或输入字段中查找特定文字。

例如，如果需要搜索整个 web 站点来删除某些过时的材料并替换某些HTML 格式化标记，则可以使用正则表达式对每个文件进行测试，看在该文件中是否存在所要查找的材料或 HTML 格式化标记。用这个方法，就可以将受影响的文件范围缩小到包含要删除或更改的材料的那些文件。然后可以使用正则表达式来删除过时的材料，最后，可以再次使用正则表达式来查找并替换那些需要替换的标记。

另一个说明正则表达式非常有用的示例是一种其字符串处理能力还不为人所知的语言。VBScript 是 Visual Basic 的一个子集，具有丰富的字符串处理功能。与 C 类似的 Jscript 则没有这一能力。正则表达式给 JScript 的字符串处理能力带来了明显改善。不过，可能还是在 VBScript 中使用正则表达式的效率更高，它允许在单个表达式中执行多个字符串操作。


正则表达式语法

一个正则表达式就是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。

这里有一些可能会遇到的正则表达式示例：

JScript | VBScript | 匹配
/^\[ \t]*$/ | "^\[ \t]*$" | 匹配一个空白行。
/\d{2}-\d{5}/ | "\d{2}-\d{5}" | 验证一个 ID 号码是否由一个 2 位数字，一个连字符以及一个 5 位数字组成。
/<(.*)>.*<\/\1>/ | "<(.*)>.*<\/\1>" | 匹配一个 HTML 标记。

下表是元字符及其在正则表达式上下文中的行为的一个完整列表：

字符 | 描述
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。
$ | 匹配输入字符串的结束位置。如果设置了 RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。
* | 匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ | 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。
? | 匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} | n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。
{n,} | n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} | m 和 n 均为非负整数，其中n <= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
? | 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。
. | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。
(pattern) | 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在 JScript 中则使用 $0…$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。
(?:pattern) | 匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern) | 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如， 'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。
(?!pattern) | 负向预查，在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始
x|y | 匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz] | 字符集合。匹配所包含的任意一个字符。例如，'[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如，'[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] | 字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b | 匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配 "never" 中的 'er'，但不能匹配 "verb" 中的 'er'。
\B | 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。
\cx | 匹配由 x 指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。
\d | 匹配一个数字字符。等价于 [0-9]。
\D | 匹配一个非数字字符。等价于 [^0-9]。
\f | 匹配一个换页符。等价于 \x0c 和 \cL。
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。
\r | 匹配一个回车符。等价于 \x0d 和 \cM。
\s | 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t | 匹配一个制表符。等价于 \x09 和 \cI。
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w | 匹配包括下划线的任何单词字符。等价于 '[A-Za-z0-9_]'。
\W | 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn | 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如，'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
\num | 匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。
\n | 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为向后引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。
\nm | 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式，则 nm 为向后引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。
\nml | 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。
\un | 匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (©)。


建立正则表达式

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。

可以通过在一对分隔符之间放入表达式模式的各种组件来构造一个正则表达式。对 JScript 而言，分隔符为一对正斜杠 (/) 字符。例如：

/expression/

对 VBScript 而言，则采用一对引号 ("") 来确定正则表达式的边界。例如：

"expression"

在上面所示的两个示例中，正则表达式模式 (expression) 均存储在 RegExp 对象的 Pattern 属性中。

正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。


优先权顺序

JScript

优先级顺序

在构造正则表达式之后，就可以象数学表达式一样来求值，也就是说，可以从左至右并按照一个优先级顺序来求值。

下表从最高优先级到最低优先级列出各种正则表达式操作符的优先级顺序：

操作符 | 描述
\ | 转义符
(), (?:), (?=), [] | 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} | 限定符
^, $, \anymetacharacter | 位置和顺序
| | “或”操作


普通字符

普通字符由所有那些未显式指定为元字符的打印和非打印字符组成。这包括所有的大写和小写字母字符，所有数字，所有标点符号以及一些符号。

最简单的正则表达式是一个单独的普通字符，可以匹配所搜索字符串中的该字符本身。例如，单字符模式 'A' 可以匹配所搜索字符串中任何位置出现的字母 'A'。这里有一些单字符正则表达式模式的示例：

/a/
/7/
/M/

等价的 VBScript 单字符正则表达式为：

"a"
"7"
"M"

可以将多个单字符组合在一起得到一个较大的表达式。例如，下面的 JScript 正则表达式不是别的，就是通过组合单字符表达式 'a'、'7'以及 'M' 所创建出来的一个表达式。

/a7M/

等价的 VBScript 表达式为：

"a7M"

请注意这里没有连接操作符。所需要做的就是将一个字符放在了另一个字符后面。


特殊字符（正则表达式）

JScript

特殊字符

有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹配这些特殊字符，必须首先将这些字符转义，也就是在前面使用一个反斜杠 (\)。下表给出了这些特殊字符及其含义：

特殊字符 | 说明
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性，则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身，请使用 \$。
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符，请使用 \( 和 \)。
* | 匹配前面的子表达式零次或多次。要匹配 * 字符，请使用 \*。
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符，请使用 \+。
. | 匹配除换行符 \n之外的任何单字符。要匹配 .，请使用 \。
[ | 标记一个中括号表达式的开始。要匹配 [，请使用 \[。
? | 匹配前面的子表达式零次或一次，或指明一个非贪婪限定符。要匹配 ? 字符，请使用 \?。
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如， 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\"，而 '\(' 则匹配 "("。
^ | 匹配输入字符串的开始位置，除非在方括号表达式中使用，此时它表示不接受该字符集合。要匹配 ^ 字符本身，请使用 \^。
{ | 标记限定符表达式的开始。要匹配 {，请使用 \{。
| | 指明两项之间的一个选择。要匹配 |，请使用 \|。


非打印字符

有不少很有用的非打印字符，偶尔必须使用。下表显示了用来表示这些非打印字符的转义序列：

字符 | 含义
\cx | 匹配由 x 指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。
\f | 匹配一个换页符。等价于 \x0c 和 \cL。
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。
\r | 匹配一个回车符。等价于 \x0d 和 \cM。
\s | 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t | 匹配一个制表符。等价于 \x09 和 \cI。
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。


字符匹配

句点 (.) 匹配一个字符串中任何单个的打印或非打印字符，除了换行符 (\n) 之外。下面的 JScript 正则表达式可以匹配 'aac'、'abc'、'acc'、'adc'如此等等，同样也可以匹配 'a1c'、'a2c'、a-c'以及 a#c'：

/a.c/

等价的 VBScript 正则表达式为：

"a.c"

如果试图匹配一个包含文件名的字符串，其中句点 (.) 是输入字符串的一部分，则可以在正则表达式中的句点前面加上一个反斜杠 (\) 字符来实现这一要求。举例来说，下面的 JScript 正则表达式就能匹配 'filename.ext'：

/filename\.ext/

对 VBScript 而言，等价的表达式如下所示：

"filename\.ext"

这些表达式仍然是相当有限的。它们只允许匹配任何单字符。很多情况下，对从列表中匹配特殊字符十分有用。例如，如果输入文字中包含用数字表示为 Chapter 1, Chapter 2 诸如此类的章节标题，你可能需要找到这些章节标题。

括号表达式

可以在一个方括号 ([ 和 ]) 中放入一个或多个单字符，来创建一个待匹配的列表。如果字符被放入括号中括起来，则该列表称为括号表达式。括号内和其他任何地方一样，普通字符代表其本身，也就是说，它们匹配输入文字中出现的一处自己。大多数特殊字符在位于括号表达式中时都将失去其含义。这里有一些例外：

  • ']' 字符如果不是第一项，则将结束一个列表。要在列表中匹配 ']' 字符，请将其放在第一项，紧跟在开始的 '[' 后面。
  • '\' 仍然作为转义符。要匹配 '\' 字符，请使用 '\\'。

括号表达式中所包含的字符只匹配该括号表达式在正则表达式中所处位置的一个单字符。下面的 JScript 正则表达式可以匹配 'Chapter 1'、'Chapter 2'、'Chapter 3'、'Chapter 4' 以及 'Chapter 5'：

/Chapter [12345]/

在 VBScript 中要匹配同样的章节标题，请使用下面的表达式：

"Chapter [12345]"

请注意单词 'Chapter' 及后面的空格与括号内的字符的位置关系是固定的。因此，括号表达式只用来指定满足紧跟在单词 'Chapter' 和一个空格之后的单字符位置的字符集合。这里是第九个字符位置。

如果希望使用范围而不是字符本身来表示待匹配的字符，则可以使用连字符将该范围的开始和结束字符分开。每个字符的字符值将决定其在一个范围内的相对顺序。下面的 JScript 正则表达式包含了一个等价于上面所示的括号列表的范围表达式。

/Chapter [1-5]/

VBScript 中相同功能的表达式如下所示：

"Chapter [1-5]"

如果以这种方式指定范围，则开始和结束值都包括在该范围内。有一点特别需要注意的是，在 Unicode 排序中起始值一定要在结束值之前。

如果想在括号表达式中包括连字符，则必须使用下述方法之一：

  • 使用反斜杠将其转义：
    [\-]
  • 将连字符放在括号列表的开始和结束位置。下面的表达式能匹配所有的小写字母和连字符：
    [-a-z]
[a-z-]
  • 创建一个范围，其中开始字符的值小于连字符，而结束字符的值等于或大于连字符。下面两个正则表达式都满足这一要求：
    [!--]
[!-~]

同样，通过在列表开始处放置一个插入符(^)，就可以查找所有不在列表或范围中的字符。如果该插入符出现在列表的其他位置，则匹配其本身，没有任何特殊含义。下面的 JScript 正则表达式匹配章节号大于 5 的章节标题：

/Chapter [^12345]/

对 VBScript 则使用：

"Chapter [^12345]"

在上面所示的示例中，表达式将匹配第九个位置处除1, 2, 3, 4, or 5 之外的任何数字字符。因此， 'Chapter 7' 为一个匹配，同样 'Chapter 9' 也是如此。

上面的表达式可以使用连字符 (-) 表示。对 JScript 为：

/Chapter [^1-5]/

或者，对 VBScript 为：

"Chapter [^1-5]"

括号表达式的典型用法是指定对任何大写或小写字母字符或任何数字的匹配。下面的 JScript 表达式给出了这一匹配：

/[A-Za-z0-9]/

等价的 VBScript 表达式为：

"[A-Za-z0-9]"


限定符

有时候不知道要匹配多少字符。为了能适应这种不确定性，正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

下表给出了各种限定符及其含义的说明：

字符 | 描述
* | 匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ | 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。
? | 匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} | n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。
{n,} | n 是一个非负整数。至少匹配 n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} | m 和 n 均为非负整数，其中n <= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

对一个很大的输入文档而言，章节数很轻易就超过九章，因此需要有一种方法来处理两位数或者三位数的章节号。限定符就提供了这个功能。下面的 JScript 正则表达式可以匹配具有任何位数的章节标题：

/Chapter [1-9][0-9]*/

下面的 VBScript 正则表达式执行同样的匹配：

"Chapter [1-9][0-9]*"

请注意限定符出现在范围表达式之后。因此，它将应用于所包含的整个范围表达式，在本例中，只指定了从 0 到 9 的数字。

这里没有使用 '+' 限定符，因为第二位或后续位置上并不一定需要一个数字。同样也没有使用 '?' 字符，因为这将把章节数限制为只有两位数字。在 'Chapter' 和空格字符之后至少要匹配一个数字。

如果已知章节数限制只有 99 章，则可以使用下面的 JScript 表达式来指定至少有一位数字，但不超过两个数字。

/Chapter [0-9]{1,2}/

对 VBScript 可以使用下述正则表达式：

"Chapter [0-9]{1,2}"

上述表达式的缺点是如果有一个章节号大于 99，它仍只会匹配前两位数字。另一个缺点是某些人可以创建一个 Chapter 0，而且仍能匹配。一个更好的用来匹配两位数的 JScript 表达式如下：

/Chapter [1-9][0-9]?/

或者

/Chapter [1-9][0-9]{0,1}/

对 VBScript 而言，下述表达式与上面等价：

"Chapter [1-9][0-9]?"

或者

"Chapter [1-9][0-9]{0,1}"

'*'、'+' 和 '?' 限定符都称之为贪婪的，也就是说，他们尽可能多地匹配文字。有时这根本就不是所希望发生的情况。有时则正好希望最小匹配。

例如，你可能要搜索一个 HTML 文档来查找一处包含在 H1 标记中的章节标题。在文档中该文字可能具有如下形式：

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的表达式匹配从开始的小于号 (<) 到 H1 标记结束处的大于号之间的所有内容。

/<.*>/

VBScript 的正则表达式为：

"<.*>"

如果所要匹配的就是开始的 H1 标记，则下述非贪婪地表达式就只匹配 <H1>。

/<.*?>/

或者

"<.*?>"

通过在 '*'、 '+' 或 '?' 限定符后放置 '?'，该表达式就从贪婪匹配转为了非贪婪或最小匹配。


定位符

到现在为止，所看到的示例都只考虑查找任何地方出现的章节标题。出现的任何一个字符串 'Chapter' 后跟一个空格和一个数字可能是一个真正的章节标题，也可能是对其他章节的交叉引用。由于真正的章节标题总是出现在一行的开始，因此需要设计一个方法只查找标题而不查找交叉引用。

定位符提供了这个功能。定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。下表包含了正则表达式及其含义的列表：

字符 | 描述
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。
$ | 匹配输入字符串的结束位置。如果设置了 RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。
\b | 匹配一个单词边界，也就是指单词和空格间的位置。
\B | 匹配非单词边界。

不能对定位符使用限定符。因为在一个换行符或者单词边界的前面或后面不会有连续多个位置，因此诸如 '^*' 的表达式是不允许的。

要匹配一行文字开始位置的文字，请在正则表达式的开始处使用 '^' 字符。不要把 '^' 的这个语法与其在括号表达式中的语法弄混。它们的语法根本不同。

要匹配一行文字结束位置的文字，请在正则表达式的结束处使用 '$' 字符。

要在查找章节标题时使用定位符，下面的 JScript 正则表达式将匹配位于一行的开始处最多有两个数字的章节标题：

/^Chapter [1-9][0-9]{0,1}/

VBScript 中相同功能的正则表达式如下：

"^Chapter [1-9][0-9]{0,1}"

一个真正的章节标题不仅出现在一行的开始，而且这一行中也仅有这一个内容，因此，它必然也位于一行的结束。下面的表达式确保所指定的匹配只匹配章节而不会匹配交叉引用。它是通过创建一个只匹配一行文字的开始和结束位置的正则表达式来实现的。

/^Chapter [1-9][0-9]{0,1}$/

对 VBScript 则使用：

"^Chapter [1-9][0-9]{0,1}$"

匹配单词边界有少许不同，但却给正则表达式增加了一个非常重要的功能。单词边界就是单词和空格之间的位置。非单词边界就是其他任何位置。下面的 JScript 表达式将匹配单词 'Chapter' 的前三个字符，因为它们出现在单词边界后：

/\bCha/

对 VBScript 为：

"\bCha"

这里 '\b' 操作符的位置很关键。如果它位于要匹配的字符串的开始，则将查找位于单词开头处的匹配；如果它位于改字符串的末尾，则查找位于单词结束处的匹配。例如，下面的表达式将匹配单词 'Chapter' 中的 'ter'，因为它出现在单词边界之前：

/ter\b/

以及

"ter\b"

下面的表达式将匹配 'apt'，因为它位于 'Chapter' 中间，但不会匹配 'aptitude' 中的'apt'：

/\Bapt/

以及

"\Bapt"

这是因为在单词 'Chapter' 中 'apt' 出现在非单词边界位置，而在单词 'aptitude' 中位于单词边界位置。非单词边界操作符的位置不重要，因为匹配与一个单词的开头或结尾无关。


选择与编组

选择允许使用 '|' 字符来在两个或多个候选项中进行选择。通过扩展章节标题的正则表达式，可以将其扩充为不仅仅适用于章节标题的表达式。不过，这可没有想象的那么直接。在使用选择时，将匹配 '|' 字符每边最可能的表达式。你可能认为下面的 JScript 和 VBScript 表达式将匹配位于一行的开始和结束位置且后跟一个或两个数字的 'Chapter' 或 'Section'：

/^Chapter|Section [1-9][0-9]{0,1}$/
"^Chapter|Section [1-9][0-9]{0,1}$"

不幸的是，真正的情况是上面所示的正则表达式要么匹配位于一行开始处的单词 'Chapter'，要么匹配一行结束处的后跟任何数字的 'Section'。如果输入字符串为 'Chapter 22'，上面的表达式将只匹配单词 'Chapter'。如果输入字符串为 'Section 22'，则该表达式将匹配 'Section 22'。但这种结果不是我们此处的目的，因此必须有一种办法来使正则表达式对于所要做的更易于响应，而且确实也有这种方法。

可以使用圆括号来限制选择的范围，也就是说明确该选择只适用于这两个单词 'Chapter' 和 'Section'。不过，圆括号同样也是难处理的，因为它们也用来创建子表达式，有些内容将在后面关于子表达式的部分介绍。通过采用上面所示的正则表达式并在适当位置添加圆括号，就可以使该正则表达式既可以匹配 'Chapter 1'，也可以匹配 'Section 3'。

下面的正则表达式使用圆括号将 'Chapter' 和 'Section' 组成一组，所以该表达式才能正确工作。对 JScript 为：

/^(Chapter|Section) [1-9][0-9]{0,1}$/

对 VBScript 为：

"^(Chapter|Section) [1-9][0-9]{0,1}$"

这些表达式工作正确，只是产生了一个有趣的副产品。在 'Chapter|Section' 两边放置圆括号建立了适当的编组，但也导致两个待匹配单词之一都被捕获供今后使用。由于在上面所示的表达式中只有一组圆括号，因此只能有一个捕获的 submatch。可以使用 VBScript 的 Submatches 集合或者 JScript 中 RegExp 对象的 $1-$9 属性来引用这个子匹配。

有时捕获一个子匹配是所希望的，有时则是不希望的。在说明所示的示例中，真正想做的就是使用圆括号对单词 'Chapter' 或 'Section' 之间的选择编组。并不希望在后面再引用该匹配。实际上，除非真的是需要捕获子匹配，否则请不要使用。由于不需要花时间和内存来存储那些子匹配，这种正则表达式的效率将更高。

可以在正则表达式模式圆括号内部的前面使用 '?:'来防止存储该匹配供今后使用。对上面所示正则表达式的下述修改提供了免除子匹配存储的相同功能。对 JScript：

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

对 VBScript：

"^(?:Chapter|Section) [1-9][0-9]{0,1}$"

除了 '?:' 元字符，还有两个非捕获元字符用于称之为预查的匹配。一个为正向预查，用 ?= 表示， 在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串。一个为负向预查，用 '?!' 表示，在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。

例如，假定有一个包含引用有 Windows 3.1、Windows 95、Windows 98 以及 Windows NT 的文档。进一步假设需要更新该文档，方法是查找所有对 Windows 95、Windows 98 以及 Windows NT 的引用，并将这些引用更改为 Windows 2000。可以使用下面的 JScript 正则表达式，这是一个正向预查，来匹配 Windows 95、Windows 98 以及 Windows NT：

/Windows(?=95 |98 |NT )/

在 VBScript 要进行同样的匹配可以使用下述表达式：

"Windows(?=95 |98 |NT )"

找到一个匹配后，紧接匹配到的文字（而不包括预查中使用的字符）就开始对下一次匹配的搜索。例如，如果上面所示的表达式匹配到 'Windows 98'，则将从 'Windows' 而不是 '98' 之后继续查找。


后向引用

JScript

向后引用

正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下，对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对这部分正则表达式的保存。

所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始，连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 '\n' 访问，其中 n 为一个标识特定缓冲区的一位或两位十进制数。

向后引用一个最简单，最有用的应用是提供了确定文字中连续出现两个相同单词的位置的能力。请看下面的句子：

Is is the cost of of gasoline going up up?

根据所写内容，上面的句子明显存在单词多次重复的问题。如果能有一种方法无需查找每个单词的重复现象就能修改该句子就好了。下面的 JScript 正则表达式使用一个子表达式就可以实现这一功能。

/\b([a-z]+) \1\b/gi

等价的 VBScript 表达式为：

"\b([a-z]+) \1\b"

在这个示例中，子表达式就是圆括号之间的每一项。所捕获的表达式包括一个或多个字母字符，即由 '[a-z]+' 所指定的。该正则表达式的第二部分是对前面所捕获的子匹配的引用，也就是由附加表达式所匹配的第二次出现的单词。'\1'用来指定第一个子匹配。单词边界元字符确保只检测单独的单词。如果不这样，则诸如 "is issued" 或 "this is" 这样的短语都会被该表达式不正确地识别。

在 JScript 表达式中，正则表达式后面的全局标志 ('g') 表示该表达式将用来在输入字符串中查找尽可能多的匹配。大小写敏感性由表达式结束处的大小写敏感性标记 ('i') 指定。多行标记指定可能出现在换行符的两端的潜在匹配。对 VBScript 而言，在表达式中不能设置各种标记，但必须使用 RegExp 对象的属性来显式设置。

使用上面所示的正则表达式，下面的 JScript 代码可以使用子匹配信息，在一个文字字符串中将连续出现两次的相同单词替换为一个相同的单词：

var ss = "Is is the cost of of gasoline going up up?.\n";
var re = /\b([a-z]+) \1\b/gim;       // 创建正则表达式样式。
var rv = ss.replace(re,"$1");   // 用一个单词替代两个单词。

最接近的等价 VBScript 代码如下：

Dim ss, re, rv
ss = "Is is the cost of of gasoline going up up?." & vbNewLine
Set re = New RegExp
re.Pattern = "\b([a-z]+) \1\b"
re.Global = True
re.IgnoreCase = True
re.MultiLine = True
rv = re.Replace(ss,"$1")

请注意在 VBScript 代码中，全局、大小写敏感性以及多行标记都是使用 RegExp 对象的适当属性来设置的。

在 replace 方法中使用 $1 来引用所保存的第一个子匹配。如果有多个子匹配，则可以用 $2, $3 等继续引用。

向后引用的另一个用途是将一个通用资源指示符 (URI) 分解为组件部分。假定希望将下述的 URI 分解为协议 (ftp, http, etc)，域名地址以及页面/路径：

http://msdn.microsoft.com:80/scripting/default.htm

下面的正则表达式可以提供这个功能。对 JScript，为：

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

对 VBScript 为：

"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)"

第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三个附加子表达式捕获网站端口号码，如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后，第四个附加子表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除 '#' 或空格之外的字符。

将该正则表达式应用于上面所示的 URI 后，子匹配包含下述内容：

  • RegExp.$1 包含 "http"
  • RegExp.$2 包含 "msdn.microsoft.com"
  • RegExp.$3 包含 ":80"
  • RegExp.$4 包含 "/scripting/default.htm"


JScript 语言参考

特性信息

错误

函数

方法

对象

运算符

属性

语句


特性信息

下表列出了 JScript 的特性：

描述 | 语言元素
Jscript 按宿主应用的版本列表和按版本的特性列表。 | 版本信息
JScript 目前的 ECMA 特性列表。 | Microsoft JScript 特性 - ECMA
JScript 目前的非 ECMA 特性列表。 | Microsoft JScript 特性 - 非 ECMA


Microsoft JScript 特性 - ECMA

下表列出了符合 ECMA 标准的 JScript 功能。

种类 | 特性/关键字
数组处理 | Array join、length、reverse、sort
赋值 | 赋值 (=) 复合赋值(OP=)
Boolean | Boolean
注释 | /*...*/ 或 //
常数/文字 | NaN null true、false Infinity 未定义
控制流 | Break continue for for...in if...else return while
日期和时间 | Date getDate、getDay、getFullYear、getHours、getMilliseconds、getMinutes、getMonth、getSeconds、getTime、getTimezoneOffset、getYear、 getUTCDate、getUTCDay、getUTCFullYear、getUTCHours、getUTCMilliseconds、getUTCMinutes、getUTCMonth、getUTCSeconds、 setDate、setFullYear、setHours、setMilliseconds、setMinutes、setMonth、setSeconds、setTime、setYear、 setUTCDate、setUTCFullYear、setUTCHours、setUTCMilliseconds、setUTCMinutes、setUTCMonth、setUTCSeconds、 toGMTString、toLocaleString、toUTCString、parse、UTC
声明 | Function new this var with
函数创建 | Function arguments、length
Global 方法 | Global escape、unescape eval isFinite、isNaN parseInt、parseFloat
数学 | Math abs、acos、asin、atan、atan2、ceil、cos、exp、floor、log、max、min、pow、random、round、sin、sqrt、tan、 E、LN2、LN10、LOG2E、LOG10E、PI、SQRT1_2、SQRT2
数字 | Number MAX_VALUE、MIN_VALUE NaN NEGATIVE_INFINITY、POSITIVE_INFINITY
对象创建 | Object new constructor、prototype、instanceof、toString、valueOf
运算符 | 加法 (+)、减法 (-) 算术取模 (%) 乘 (*)、除 (/) 负 (-) 相等 (==)、不相等 (!=) 小于 (<)、小于等于 (<=) 大于 (>) 大于等于 (>=) 逻辑与(&&)、或 (||)、非 (!) 位与 (&)、或 (|)、非 (~)、异或 (^) 位左移 (<<)、右移 (>>) 无符号右移 (>>>) 条件 (?:) 逗号 (,) delete、typeof、void 递减 ( — )、递增 (++)
对象 | Array Boolean Date Function Global Math Number Object String
字符串 | String charAt、charCodeAt、fromCharCode indexOf、lastIndexOf split toLowerCase、toUpperCase length


Microsoft JScript 特性 - 非 ECMA

下表列出了不符合 ECMA 标准的 JScript 功能。

种类 | 特性/关键字
数组处理 | concat、slice VBArray dimensions、getItem、lbound、toArray、ubound
条件编译 | @cc_on @if 语句 @set 语句 条件编译变量
控制流 | do...while Labeled switch
日期和时间 | getVarDate
枚举 | Enumerator atEnd、item、moveFirst、moveNext
错误处理 | Error description、number throw、try...catch
创建函数 | caller
运算符 | 等于 (===)、不等于 (!==)
对象 | Enumerator RegExp 正则表达式 VBArray ActiveXObject GetObject
正则表达式和模式匹配 | RegExp index、input、lastIndex、$1...$9、source、compile、exec、test 正则表达式语法
脚本引擎标识 | ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion
字符串 | concat, slice match, replace, search anchor, big, blink, bold, fixed, fontcolor, fontsize, italics, link, small, strike, sub, sup


JScript 错误

下表列出了 JScript 错误的类型。

有关详细信息 | 参见
JScript 运行时错误列表 | 运行时错误
JScript 语法错误列表 | 语法错误


JScript 运行时错误

JScript 运行时错误是指当 JScript 脚本试图执行一个系统不能运行的动作时导致的错误。当正在运行脚本、计算变量表达式、或者正在动态分配内存时出现 JScript 运行时错误时。

错误号 | 描述
5029 | 数组长度必须为一有限正整数
5030 | 必须赋给数组长度一个有限正数
5028 | 需要 Array 或 arguments 对象
5010 | 需要 Boolean
5003 | 不能给函数返回值赋值
5000 | 不能给 'this' 赋值
5006 | 需要 Date 对象
5015 | 需要 Enumerator 对象
5022 | 异常抛出，但无法抓住
5020 | 正则表达式中缺少“)”
5019 | 正则表达式中缺少“]”
5023 | 函数没有合法的 Prototype 对象
5002 | 需要 Function 对象
5008 | 非法赋值
5021 | 字符集范围无效
5014 | 需要 JScript 对象
5001 | 需要 Number 类型
5007 | 需要 Object 类型
5012 | 需要对象的成员
5016 | 需要正则表达式对象
5005 | 需要 String
5017 | 正则表达式语法错误
5026 | 小数部分的位数越界
5027 | 精度越界
5025 | 待解码的 URI 编码非法
5024 | 待解码的 URI 包含有非法字符
5009 | 未定义标识符
5018 | 未预期的限定符
5013 | 需要 VBArray

请参阅

JScript 语法错误


JScript 语法错误

JScript 语法错误是指当 JScript 语句违反了 JScript 脚本语言的一条或多条语法规则时导致的错误。JScript 语法错误发生在程序编译阶段，在开始运行该程序之前。

错误号 | 描述
1019 | 在循环外不能有“break”
1020 | 在循环外不能有“continue”
1030 | 条件编译已关闭
1027 | 一条 “switch” 语句中只能有一个 “default”
1005 | 需要“(”
1006 | 需要“)”
1012 | 需要“/”
1003 | 需要“:”
1004 | 需要“;”
1032 | 需要“@”
1029 | 需要“@end”
1007 | 需要“]”
1008 | 需要“{”
1009 | 需要“}”
1011 | 需要“=”
1033 | 需要“catch”
1031 | 需要常数
1023 | 需要十六进制数
1010 | 需要标识符
1028 | 需要标识符、字符串或者数字
1024 | 需要“while”
1014 | 非法字符
1026 | 未找到标签
1025 | 标签定义重复
1018 | 函数外有 'return' 语句
1002 | 语法错误
1035 | “Throw”的后面必须跟有一个表达式，且在同一源代码行上
1016 | 注释未结束
1015 | 字符串常数未结束

请参阅

JScript 运行时错误


JScript 函数

下表列出了 JScript 函数。

描述 | 语言元素
返回文件中的 Automation 对象的引用。 | Getobject 函数
返回代表所用的脚本语言的字符串。 | ScriptEngine 函数
返回所使用的脚本引擎的生成版本号。 | ScriptEngineBuildVersion 函数
返回所使用的脚本引擎的主版本号。 | ScriptEngineMajorVersion 函数
返回所使用的脚本引擎的次版本号。 | ScriptEngineMinorVersion 函数


GetObject 函数 (JScript)

JScript

GetObject 函数

从文件中返回对 Automation 对象的一个引用。

GetObject([pathname] [, class])

参数

pathname
可选项。完整的文件路径和名称，文件中包含了要检索的对象。如果忽略了 pathname ，那么需要 class 。
class
可选项。对象的类。

类参数采用的语法是 appname.objectype ，包括了以下部分：

appname
必选项。提供对象的应用程序名称。
objectype
必选项。要创建的对象的类的类型。

说明

使用 GetObject 函数可以从文件中访问一个 Automation 对象。可以将由 GetObject 返回的对象赋值给对象变量。例如：

var CADObject;
CADObject = GetObject("C:\\CAD\\SCHEMA.CAD");

在执行这段代码时，将启动与指定的 pathname 相关的应用程序，所指定文件中的对象将被激活。如果 pathname 是长度为零的字符串 ("") ，那么 GetObject 将返回指定类型的一个新实例。如果忽略了 pathname 参数，那么 GetObject 将返回指定类型的当前活动实例。如果不存在指定类型的对象，那么将出错。

一些应用程序允许激活文件的一部分。要实现此功能，可以在文件名的尾部添加一个感叹号 (!) ，然后在感叹号后跟上一个字符串来指定要激活的文件部分。关于如何创建这个字符串的详细信息，请参阅创建该对象的应用程序的文档。

例如，在一个绘画应用程序中，可能在文件中存储了绘画的很多层次。可以使用下面的代码激活名为 SCHEMA.CAD 的图画中的一层。

var LayerObject = GetObject("C:\\CAD\\SCHEMA.CAD!Layer3");

如果没有指定对象的类， Automation 将根据所提供的文件名来决定要启动的应用程序和要激活的对象。但是，一些文件可能支持不止一种对象的类。例如，一个图画可能支持三种不同的对象类型：应用程序对象、绘画对象，以及工具栏对象，所有这些都是同一个文件中的部分。要指定文件中希望激活的对象，可以使用可选的 class 参数。例如：

var MyObject;
MyObject = GetObject("C:\\DRAWINGS\\SAMPLE.DRW", "FIGMENT.DRAWING");

在前面的例子中，FIGMENT 是绘画应用程序的名称，而 DRAWING 是它支持的一种对象类型。对象被激活后，可以使用定义的对象变量来引用它。在前面的例子中，可以通过对象变量 MyObject 来访问新对象的属性和方法。例如：

MyObject.Line(9, 90);
MyObject.InsertText(9, 100, "Hello, world.");
MyObject.SaveAs("C:\\DRAWINGS\\SAMPLE.DRW");
注意 如果当前已经有了对象的实例，或者想要由已经加载了的文件创建对象，那么可以使用 GetObject 函数。如果没有当前的实例，而且也不想由已经加载的文件来启动对象，那么可以使用 ActiveXObject 对象。

如果对象自身已经注册为单实例对象了，那么无论执行多少次 ActiveXObject 也只会创建对象的一个实例。对于单实例对象， GetObject 在用长度为零的字符串 ("") 语法调用时总是返回相同的实例，而如果忽略了 pathname 参数就会出错。

要求

版本 5

请参阅

ActiveXObject 对象


ScriptEngine 函数 (JScript)

JScript

ScriptEngine 函数

返回一个字符串，代表正在使用的脚本语言。

ScriptEngine( )

说明

ScriptEngine 函数可以返回下列任意字符串：

字符串 | 描述
JScript | 指明 Microsoft JScript 是当前的 Scripting 引擎。
VBA | 指明 Microsoft Visual Basic for Applications 是当前的 Scripting 引擎。
VBScript | 指明 Microsoft Visual Basic Scripting Edition 是当前的 Scripting 引擎。

示例

下面的例子说明了 ScriptEngine 函数的用法：

function GetScriptEngineInfo(){
   var s;
   s = ""; // 根据必要的信息创建字符串。
   s += ScriptEngine() + " Version ";
   s += ScriptEngineMajorVersion() + ".";
   s += ScriptEngineMinorVersion() + ".";
   s += ScriptEngineBuildVersion();
   return(s);
}

要求

版本 5

请参阅

ScriptEngineBuildVersion 函数 | ScriptEngineMajorVersion 函数 | ScriptEngineMinorVersion 函数


ScriptEngineBuildVersion 函数 (JScript)

JScript

ScriptEngineBuildVersion 函数

返回所使用的 Scripting 引擎的生成版本号。

ScriptEngineBuildVersion( )

说明

返回值直接依赖于所使用的 Scripting 语言的动态链接库 (DLL) 中包含的版本信息。

示例

下面的例子说明了 ScriptEngineBuildVersion 函数的用法：

function GetScriptEngineInfo(){
   var s;
   s = ""; // 根据必要的信息创建字符串。
   s += ScriptEngine() + " Version ";
   s += ScriptEngineMajorVersion() + ".";
   s += ScriptEngineMinorVersion() + ".";
   s += ScriptEngineBuildVersion();
   return(s);
}

要求

版本 5

请参阅

ScriptEngine 函数 | ScriptEngineMajorVersion 函数 | ScriptEngineMinorVersion 函数


ScriptEngineMajorVersion 函数 (Jscript)

JScript

ScriptEngineMajorVersion 函数

返回所使用的 Scripting 引擎的主要版本号。

ScriptEngineMajorVersion( )

说明

返回值直接依赖于所使用的 Scripting 语言的动态链接库 (DLL) 中包含的版本信息。

示例

下面的例子说明了 ScriptEngineMajorVersion 函数的用法：

function GetScriptEngineInfo(){
   var s;
   s = ""; // 根据必要的信息创建字符串。
   s += ScriptEngine() + " Version ";
   s += ScriptEngineMajorVersion() + ".";
   s += ScriptEngineMinorVersion() + ".";
   s += ScriptEngineBuildVersion();
   return(s);
}

要求

版本 5

See Also

ScriptEngine 函数 | ScriptEngineBuildVersion 函数 | ScriptEngineMinorVersion 函数


ScriptEngineMinorVersion 函数 (JScript)

JScript

ScriptEngineMinorVersion 函数

返回所使用的 Scripting 引擎的次要版本号。

ScriptEngineMinorVersion( )

说明

返回值直接依赖于所使用的 Scripting 语言的动态链接库 (DLL) 中包含的版本信息。

示例

下面的例子说明了 ScriptEngineMinorVersion 函数的用法：

function GetScriptEngineInfo(){
   var s;
   s = ""; // 根据必要的信息创建字符串。
   s += ScriptEngine() + " Version ";
   s += ScriptEngineMajorVersion() + ".";
   s += ScriptEngineMinorVersion() + ".";
   s += ScriptEngineBuildVersion();
   return(s);
}

要求

版本 5

请参阅

ScriptEngine 函数 | ScriptEngineBuildVersion 函数 | ScriptEngineMajorVersion 函数


JScript 方法

下表列出了 JScript 方法：

描述 | 语言元素
返回一个数的绝对值。 | abs 方法
返回一个数的反余弦。 | acos 方法
在对象的指定文本两端加上一个带 NAME 属性的 HTML 锚点。 | anchor 方法
返回一个数的反正弦。 | asin 方法
返回一个数的反正切。 | atan 方法
返回从 X 轴到点 （y, x）的角度（以弧度为单位）。 | atan2 方法
返回一个表明枚举算子是否处于集合结束处的 Boolean 值。 | atEnd 方法
在 String 对象的文本两端加入 HTML 的 <BIG> 标识。 | big 方法
将 HTML 的 <BLINK> 标识添加到 String 对象中的文本两端。 | blink 方法
将 HTML 的 <B> 标识添加到 String 对象中的文本两端。 | bold 方法
返回大于等于其数值参数的最小整数。 | ceil 方法
返回位于指定索引位置的字符。 | charAt 方法
返回指定字符的 Unicode 编码。 | charCodeAt 方法
将一个正则表达式编译为内部格式。 | compile 方法
返回一个由两个数组合并组成的新数组。 | concat 方法 (Array)
返回一个包含给定的两个字符串的连接的 String 对象。 | concat 方法 (String)
返回一个数的余弦。 | cos 方法
返回 VBArray 的维数。 | dimensions 方法
对 String 对象编码，以便在所有计算机上都能阅读。 | escape 方法
对 JScript 代码求值然后执行它。 | eval 方法
在指定字符串中执行一个匹配查找。 | exec 方法
返回 e （自然对数的底） 的幂。 | exp 方法
将 HTML 的<TT> 标识添加到 String 对象中的文本两端。 | fixed 方法
返回小于等于其数值参数的最大整数。 | floor 方法
将带 COLOR 属性的 HTML <FONT> 标识添加到 String 对象中的文本两端。 | fontcolor 方法
将带 SIZE 属性的 HTML <FONT> 标识添加到 String 对象中的文本两端。 | fontsize 方法
返回 Unicode 字符值代表的的字符串。 | fromCharCode 方法
使用当地时间返回 Date 对象的月份日期值。 | getDate 方法
使用当地时间返回 Date 对象的星期几。 | getDay 方法
使用当地时间返回 Date 对象的年份。 | getFullYear 方法
使用当地时间返回 Date 对象的小时值。 | getHours 方法
返回位于指定位置的项目。 | getItem 方法
使用当地时间返回 Date 对象的毫秒值。 | getMilliseconds 方法
使用当地时间返回 Date 对象的分钟值。 | getMinutes 方法
使用当地时间返回 Date 对象的月份。 | getMonth 方法
使用当地时间返回 Date 对象的秒值。 | getSeconds 方法
返回 Date 对象中的时间值。 | getTime 方法
返回主机的时间和全球标准时间（UTC）之间的差（以分钟为单位）。 | getTimezoneOffset 方法
使用全球标准时间（UTC）返回 Date 对象的日期值。 | getUTCDate 方法
使用全球标准时间（UTC）返回 Date 对象的星期几。 | getUTCDay 方法
使用全球标准时间（UTC）返回 Date 对象的年份。 | getUTCFullYear 方法
使用全球标准时间（UTC）返回 Date 对象的小时数。 | getUTCHours 方法
使用全球标准时间（UTC）返回 Date 对象的毫秒数。 | getUTCMilliseconds 方法
使用全球标准时间（UTC）返回 Date 对象的分钟数。 | getUTCMinutes 方法
使用全球标准时间（UTC）返回 Date 对象的月份值。 | getUTCMonth 方法
使用全球标准时间（UTC）返回 Date对象的秒数。 | getUTCSeconds 方法
返回 Date 对象中的 VT_DATE。 | getVarDate 方法
返回 Date 对象中的年份。 | getYear 方法
返回在 String 对象中第一次出现子字符串的字符位置。 | indexOf 方法
返回一个 Boolean 值，表明某个给定的数是否是有穷的。 | isFinite 方法
返回一个 Boolean 值，表明某个值是否为保留值 NaN （不是一个数）。 | isNaN 方法
将 HTML 的 <I> 标识添加到 String 对象中的文本两端。 | italics 方法
返回集合中的当前项。 | item 方法
返回一个由数组中的所有元素连接在一起的 String 对象。 | join 方法
返回在 String 对象中子字符串最后出现的位置。 | lastIndexOf 方法
返回在 VBArray 中指定维数所用的最小索引值。 | lbound 方法
将带 HREF 属性的 HTML 锚点添加到 String 对象中的文本两端。 | link 方法
返回某个数的自然对数。 | log 方法
使用给定的正则表达式对象对字符串进行查找，并将结果作为数组返回。 | match 方法
返回给定的两个数值表达式中的较大者。 | max 方法
返回给定的两个数中的较小者。 | min 方法
将集合中的当前项设置为第一项。 | moveFirst 方法
将当前项设置为集合中的下一项。 | moveNext 方法
对包含日期的字符串进行分析，并返回该日期与 1970 年 1 月 1 日零点之间相差的毫秒数。 | parse 方法
返回从字符串转换而来的浮点数。 | parseFloat 方法
返回从字符串转换而来的整数。 | parseInt 方法
返回一个指定幂次的底表达式的值。 | pow 方法
返回一个 0 和 1 之间的伪随机数。 | random 方法
返回根据正则表达式进行文字替换后的字符串的拷贝。 | replace 方法
返回一个元素反序的 Array 对象。 | reverse 方法
将一个指定的数值表达式舍入到最近的整数并将其返回。 | round 方法
返回与正则表达式查找内容匹配的第一个子字符串的位置。 | search 方法
使用当地时间设置 Date 对象的数值日期。 | setDate 方法
使用当地时间设置 Date 对象的年份。 | setFullYear 方法
使用当地时间设置 Date 对象的小时值。 | setHours 方法
使用当地时间设置 Date 对象的毫秒值。 | setMilliseconds 方法
使用当地时间设置 Date 对象的分钟值。 | setMinutes 方法
使用当地时间设置 Date 对象的月份。 | setMonth 方法
使用当地时间设置 Date 对象的秒值。 | setSeconds 方法
设置 Date 对象的日期和时间。 | setTime 方法
使用全球标准时间（UTC）设置 Date 对象的数值日期。 | setUTCDate 方法
使用全球标准时间（UTC）设置 Date 对象的年份。 | setUTCFullYear 方法
使用全球标准时间（UTC）设置 Date 对象的小时值。 | setUTCHours 方法
使用全球标准时间（UTC）设置 Date 对象的毫秒值。 | setUTCMilliseconds 方法
使用全球标准时间（UTC）设置 Date 对象的分钟值。 | setUTCMinutes 方法
使用全球标准时间（UTC）设置 Date 对象的月份。 | setUTCMonth 方法
使用全球标准时间（UTC）设置 Date 对象的秒值。 | setUTCSeconds 方法
设置 Date 对象的年份值。 | setYear 方法
返回一个数的正弦。 | sin 方法
返回数组的一个片段。 | slice 方法 (Array)
返回字符串的一个片段。 | slice 方法 (String)
将 HTML <SMALL> 标识添加到 String 对象中的文本两端。 | small 方法
返回一个元素被排序了的 Array 对象。 | sort 方法
将一个字符串分割为子字符串，然后将结果作为字符串数组返回。 | split 方法
返回一个数的平方根。 | sqrt 方法
将 HTML <STRIKE> 标识添加到 String 对象中的文本两端。 | strike 方法
将 HTML <SUB> 标识放置到 String 对象中的文本两端。 | sub 方法
返回一个从指定位置开始并具有指定长度的子字符串。 | substr 方法
返回位于 String 对象中指定位置的子字符串。 | substring 方法
将 HTML <SUP> 标识放置到 String 对象中的文本两端。 | sup 方法
返回一个数的正切。 | tan 方法
返回一个 Boolean 值，表明在被查找的字符串中是否存在某个模式。 | test 方法
返回一个从 VBArray 转换而来的标准 JScript 数组。 | toArray 方法
返回一个转换为使用格林威治标准时间（GMT）的字符串的日期。 | toGMTString 方法
返回一个转换为使用当地时间的字符串的日期。 | toLocaleString 方法
返回一个所有的字母字符都被转换为小写字母的字符串。 | toLowerCase 方法
返回一个对象的字符串表示。 | toString 方法
返回一个所有的字母字符都被转换为大写字母的字符串。 | toUpperCase 方法
返回一个转换为使用全球标准时间（UTC）的字符串的日期。 | toUTCString 方法
返回在 VBArray 的指定维中所使用的最大索引值。 | ubound 方法
对用escape 方法编码的 String 对象进行解码。 | unescape 方法
返回 1970 年 1 月 1 日零点的全球标准时间 （UTC） （或 GMT）与指定日期之间的毫秒数。 | UTC 方法
返回指定对象的原始值。 | valueOf 方法


abs 方法

返回数字的绝对值。

Math.abs(number)

必选项number 参数是要需要计算绝对值的数值表达式。

说明

返回的值是 number 参数的绝对值。

示例

下面的例子演示了abs 方法的用法。

function ComparePosNegVal(n)
{
   var s;
   var v1 = Math.abs(n);
   var v2 = Math.abs(-n);
   if (v1 == v2)
      s = n + " 和 "
      s += -n + " 的绝对值是相同的。";
   return(s);
}

要求

版本 1

请参阅

Math 对象方法

应用于： Math 对象


acos 方法

返回数的反余弦值。

Math.acos(number)

必选项number 参数是需要计算反余弦值的数值表达式。

说明

返回值为 number 参数的反余弦值。

要求

版本 1

请参阅

asin 方法 | atan 方法 | cos 方法 | sin 方法 | tan 方法

应用于： Math 对象


anchor 方法

在对象中的指定文本两端放置一个有 NAME 属性的 HTML 锚点。

strVariable.anchor(anchorString)

参数

strVariable
必选项。任意的 String 对象或文字。
anchorString
必选项。想放在 HTML 锚点的 NAME 属性中的文本。

说明

调用 anchor 方法来在 String 对象外创建一个命名的锚点。下面示例说明了 anchor 方法是如何实现这个的：

var strVariable = "This is an anchor" ;
strVariable = strVariable.anchor("Anchor1");

执行完最后一条语句后 strVariable 的值为：

<A NAME="Anchor1">This is an anchor</A>

不检查该标记是否已经被应用于该字符串。

要求

版本 1

请参阅

link 方法 | String 对象的方法 | String 对象的属性

应用于： String 对象


apply 方法

应用某一对象的一个方法，用另一个对象替换当前对象。

apply([thisObj[,argArray]])

参数

thisObj
可选项。将被用作当前对象的对象。
argArray
可选项。将被传递给该函数的参数数组。

说明

如果 argArray 不是一个有效的数组或者不是 arguments 对象，那么将导致一个 TypeError。

如果没有提供 argArray 和 thisObj 任何一个参数，那么 Global 对象将被用作 thisObj， 并且无法被传递任何参数。

要求

版本 5.5

请参阅

应用于：Function 对象


asin 方法

返回数字的反正弦值。

Math.asin(number)

必选项number 参数是需要计算反正弦的数值表达式。

说明

返回值为数字参数的反正弦值。

要求

版本 1

请参阅

acos 方法 | atan 方法 | cos 方法 | Math 对象方法 | sin 方法 | tan 方法

应用于： Math 对象


atan 方法

返回数字的反正切值。

Math.atan(number)

必选项number 参数是需要计算反正切的数值表达式。

说明

返回值为其数字参数的反正切值。

要求

版本 1

请参阅

acos 方法 | asin 方法 | atan2 方法 | cos 方法 | Math 对象方法 | sin 方法 | tan 方法

应用于： Math 对象


atan2 方法

返回由 X 轴到 (y,x) 点的角度（以弧度为单位）。

Math.atan2(y, x)

参数

x
必选项。描述笛卡儿 x 坐标的数值表达式。
y
必选项。描述笛卡儿 y 坐标的数值表达式。

说明

返回值在 -pi 和 pi 之间，表示提供的 (y,x) 点的角度。

要求

版本 1

请参阅

atan 方法 | tan 方法

应用于： Math 对象


atEnd 方法

返回一个 Boolean 值，指明枚举算子是否位于集合的末尾。

myEnum.atEnd()

必选项 myEnum 参数是任意 Enumerator 对象。

说明

如果当前项是集合中的最后一个，或者集合为空，或者当前项没有定义,那么 atEnd 方法将返回 true 。否则返回 false 。

示例

在下面的代码中，使用了 atEnd 方法来决定是否到达了一个驱动器列表的末尾：

function ShowDriveList(){
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
      s +=   n + "<br>";
   }
   return(s);
}

要求

版本 2

请参阅

item 方法 | moveFirst 方法 | moveNext 方法

应用于： Enumerator 对象


big 方法

把 HTML <BIG> 标记放置在 String 对象中的文本两端。

strVariable.big( )

必选项 strVariable 参数可以是任意的 String 对象或文字。

说明

下面示例说明了 big 方法是如何工作的：

var strVariable = "This is a string object";
strVariable = strVariable.big( );

在执行完最后一个语句后，strVariable 的值为：

<BIG>This is a string object</BIG>

不检查该标记是否已经被应用于该字符串了。

要求

版本 1

请参阅

small 方法 | String 对象方法 | String 对象属性

应用于： String 对象


blink 方法

把 HTML <BLINK> 标记放置在 String 对象中的文本两端。

strVariable.blink( )

必选项 strVariable 参数是可以是任意的 String 对象或文字。

说明

下面的示例说明了 blink 方法是如何工作的：

var strVariable = "This is a string object";
strVariable = strVariable.blink( );

在最后一条语句执行完后，strVariable 的值是：

<BLINK>This is a string object</BLINK>

不检查该标记是否已经被应用于该字符串了。

在 Microsoft Internet Explorer 中不支持 <BLINK> 标记。

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性

应用于： String 对象


bold 方法

把 HTML <B> 标记放置在 String 对象中的文本两端。

strVariable.bold()

必选项 strVariable 参数可以是任意的 String 对象或文字。

说明

下面的示例说明了 bold 方法是如何工作的：

var strVariable = "This is a string object";
strVariable = strVariable.bold( );

最后一条语句执行完后，strVariable 的值是：

<B>This is a string object</B>

不检查该标记是否已经被应用于该字符串了。

要求

版本 1

请参阅

italics 方法 | String 对象的方法 | String 对象的属性

应用于： String 对象


call 方法

调用一个对象的一个方法，以另一个对象替换当前对象。

call([thisObj[,arg1[, arg2[,   [,.argN]]]]])

参数

thisObj
可选项。将被用作当前对象的对象。
arg1, arg2, , argN
可选项。将被传递方法参数序列。

说明

call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。

如果没有提供 thisObj 参数，那么 Global 对象被用作 thisObj。

要求

版本 5.5

请参阅

应用于：Function 对象


ceil 方法

返回大于等于其数字参数的最小整数。

Math.ceil(number)

必选项number 参数是数值表达式。

说明

返回值为大于等于其数字参数的最小整数。

要求

版本 1

请参阅

floor 方法 | Math 对象方法

应用于： Math 对象


charAt 方法

返回指定索引位置处的字符。

strObj.charAt(index)

参数

strObj
必选项。任意 String 对象或文字。
index
必选项。想得到的字符的基于零的索引。有效值是 0 与字符串长度减 1 之间的值。

说明

charAt 方法返回一个字符值，该字符位于指定索引位置。字符串中的第一个字符的索引为 0，第二个的索引为 1，等等。超出有效范围的索引值返回空字符串。

示例

下面的示例说明了 charAt 方法的用法：

function charAtTest(n){
   var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 初始化变量。
   var s;                                  // 声名变量。
   s = str.charAt(n - 1);                  // 从索引为n – 1的位置处
                                           // 获取正确的字符。
   return(s);                              //返回字符。
}

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性

应用于： String 对象


charCodeAt 方法

返回一个整数，代表指定位置上字符的 Unicode 编码。

strObj.charCodeAt(index)

参数

strObj
必选项。任何 String 对象或文字。
index
必选项。将被处理的字符的从零开始计数的编号。有效值为 0 到字符串长度减 1 的数字。

说明

一个字符串中的第一个字符编号为 0，第二个字符编号为 1，依此类推。

如果指定位置没有字符，将返回 NaN。

示例

以下示例阐明了 charCodeAt 方法的用法。

function charCodeAtTest(n){
  var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 初始化变量。
  var n;                                  // 声明变量。
  n = str.charCodeAt(n - 1);              // 获取位置 n 上
                                          // 字符的 Unicode 值。
  return(n);                              // 返回该值。
}

要求

版本 5.5

请参阅

fromCharCode 方法 | String 对象方法

应用于：String 对象


compile 方法

把正则表达式编译为内部格式，从而执行得更快。

rgExp.compile(pattern, [flags])

参数

rgexp
必选项。正则表达式对象的一个例子。可以是变量名或文字。
pattern
必选项。字符串表达式，它包含要被编译的正则表达式模式。
flags
可选项。可以组合使用，可用的标志有：
  • g (全局搜索所有存在的 pattern)
  • i (忽略事件)
  • m (多行搜索)

说明

compile 方法把 pattern 转换为内部的格式，从而执行得更快。例如，这使得可以在循环中更有效地使用正则表达式。当重复使用相同的表达式，那么编译过的正则表达式使执行加速。然而，如果正则表达式改变了，这种编译毫无益处。

示例

下面的例子举例说明了 compile 方法的用法：

function CompileDemo(){
   var rs;
   var s = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPp"
   // 只为大写字母创建正则表达式。
   var r = new RegExp("[A-Z]", "g");
   var a1 = s.match(r)              // 查找匹配。
   // 只为小写字母编译正则表达式。
   r.compile("[a-z]", "g");
   var a2 = s.match(r)              // 查找匹配。
   return(a1 + "\n" + a2;
}

要求

版本 3

请参阅

正则表达式对象的方法 | 正则表达式对象的属性 | 正则表达式的语法

应用于： 正则表达式对象


concat 方法 (Array)

返回一个新数组，这个新数组是由两个或更多数组组合而成的。

array1.concat([item1[, item2[, . . . [, itemN]]]])

参数

array1
必选项。其他所有数组要进行连接的 Array 对象。
item1,. . ., itemN
可选项。要连接到 array1 末尾的其他项目。

说明

concat 方法返回一个 Array 对象，其中包含了 array1 和提供的任意其他项目的连接。

要加的项目（item1 … itemN）会按照从左到右的顺序添加到数组。如果某一项为数组，那么添加其内容到 array1 的末尾。如果该项目不是数组，就将其作为单个的数组元素添加到数组的末尾。

以下为从源数组复制元素到结果数组：

  • 对于从正被连接到新数组的数组中复制的对象参数，复制后仍然指向相同的对象。不论新数组和源数组中哪一个有改变，都将引起另一个的改变。
  • 对于连接到新数组的数值或字符串，只复制其值。一个数组中值有改变并不影响另一个数组中的值。

示例

下面这个例子说明了使用数组时 concat 方法的用法:

function ConcatArrayDemo(){
   var a, b, c, d;
   a = new Array(1,2,3);
   b = "JScript";
   c = new Array(42, "VBScript);
   d = a.concat(b, c);
   // 返回数组 [1, 2, 3, "JScript", 42, "VBScript"]
   return(d);
}

要求

版本 3

请参阅

concat 方法 (String) | join 方法 | String 对象

应用于： Array 对象


concat 方法 (String)

JScript

concat 方法（String）

返回字符串值，该值包含了两个或更多个提供的字符串的连接。

string1.concat([string2[, string3[, . . . [, stringN]]]])

参数

string1
必选项。要和所有其他指定的字符串进行连接的 String 对象或文字。
string2,. . ., stringN
可选项。要连接到 string1 尾部的 String 对象或文字。

说明

concat 方法的结果等于：result = string1 + string2 + string3 + … + stringN。不论源字符串或结果字符串哪一个中的值改变了都不会影响另一个字符串中的值。如果有不是字符串的参数，在被连接到 string1 之前将先被转换为字符串。

示例

下面的示例说明了使用字符串时 concat 方法的用法：

function concatDemo(){
   var str1 = "ABCDEFGHIJKLM"
   var str2 = "NOPQRSTUVWXYZ";
   var s = str1.concat(str2);
   // 返回连接好的字符串。
   return(s);
}

要求

版本 3

请参阅

加法运算符(+) | Array 对象 | concat 方法（Array） | String 对象的方法

应用于： String 对象


cos 方法

返回数的余弦值。

Math.cos(number)

必选项 number 参数是需要计算余弦的数值表达式。

说明

返回值为其数字参数的余弦值。

要求

版本 1

请参阅

acos 方法 | asin 方法 | atan 方法 | Math 对象方法 | sin 方法 | tan 方法

应用于： Math 对象


decodeURI 方法

返回一个已编码的统一资源标识符 (URI) 的非编码形式。

decodeURI(URIstring)

必要的 URIstring 参数代表一个已编码 URI 的值。

说明

使用 decodeURI 方法代替已经过时的 unescape 方法。

decodeURI 方法返回一个字符串值。

如果 URIString 无效，那么将产生一个 URIError。

要求

版本 5.5

请参阅

decodeURIComponent 方法 | encodeURI 方法

应用于：Global 对象


decodeURIComponent 方法

返回统一资源标识符 (URI) 的一个已编码组件的非编码形式。

decodeURIComponent(encodedURIString)

必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明

URIComponent 是一个完整的 URI 的一部分。

如果 encodedURIString 无效，将产生一个 URIError。

要求

版本 5.5

请参阅

decodeURI 方法 | encodeURI 方法

应用于：Global 对象


dimensions 方法

返回 VBArray 的维数。

array.dimensions( )

必选项 array 参数为 VBArray 对象。

说明

dimensions 方法提供了一个获取指定的 VBArray 维数的方法。

下面的示例包括三个部分。第一部分是用来创建一个 Visual Basic 安全数组的 VBScript 代码。第二部分是 JScript 代码，确定该安全数组的维数和每一维的上界。这两部分都放在 HTML 页中的 <HEAD> 部分。第三部分是位于 <BODY> 部分的 JScript 代码，用来运行其他两个部分。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         k = k + 1
      Next
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vba)
{
   var i, s;
   var a = new VBArray(vba);
   for (i = 1; i <= a.dimensions(); i++)
   {
      s = "The upper bound of dimension ";
      s += i + " is ";
      s += a.ubound(i)+ ".<BR>";
   }
   return(s);
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT language="jscript">
   document.write(VBArrayTest(CreateVBArray()));
</SCRIPT>
</BODY>

要求

版本 3

请参阅

getItem 方法 | lbound 方法 | toArray 方法 | ubound 方法

应用于： VBArray 对象


encodeURI 方法

将文本字符串编码为一个有效的统一资源标识符 (URI)。

encodeURI(URIString)

必选的 URIString 参数代表一个已编码的 URI。

说明

encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI，那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码：":"、"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。

要求

版本 5.5

请参阅

decodeURI 方法 | decodeURIComponent 方法

应用于：Global 对象


encodeURIComponent 方法

将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。

encodeURIComponent(encodedURIString)

必选的 encodedURIString 参数代表一个已编码的 URI 组件。

说明

encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent，那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码，请注意，如果该字符串代表一个路径，例如 /folder1/folder2/default.html，其中的斜杠也将被编码。这样一来，当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件，请使用 encodeURI 方法进行编码。

要求

版本 5.5

请参阅

decodeURI 方法 | decodeURIComponent 方法

应用于：Global 对象


escape 方法

对 String 对象编码以便它们能在所有计算机上可读，

escape(charString)

必选项 charstring 参数是要编码的任意 String 对象或文字。

说明

escape 方法返回一个包含了 charstring 内容的字符串值（ Unicode 格式）。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替，其中 xx 等于表示该字符的十六进制数。例如，空格返回的是 "%20" 。

字符值大于 255 的以 %u xxxx 格式存储。

注意 escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。

要求

版本 1

请参阅

encodeURI 方法 | encodeURIComponent 方法 | String 对象 | unescape 方法

应用于： Global 对象


eval 方法

检查 JScript 代码并执行.

eval(codeString)

必选项 codestring 参数是包含有效 JScript 代码的字符串值。这个字符串将由 JScript 分析器进行分析和执行。

说明

eval 函数允许 JScript 源代码的动态执行。例如,下面的代码创建了一个包含 Date 对象的新变量 mydate ：

eval("var mydate = new Date();");

传递给 eval 方法的代码执行时的上下文和调用 eval 方法的一样.

要求

版本 1

请参阅

String 对象

应用于： Global 对象


exec 方法

用正则表达式模式在字符串中运行查找，并返回包含该查找结果的一个数组。

rgExp.exec(str)

参数

rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。
str
必选项。要在其中执行查找的 String 对象或字符串文字。

说明

如果 exec 方法没有找到匹配，则它返回 null。如果它找到匹配，则 exec 方法返回一个数组，并且更新全局 RegExp 对象的属性，以反映匹配结果。数组的0元素包含了完整的匹配，而第1到n元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志 (g) 的 match 方法。

如果为正则表达式设置了全局标志，exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志，exec 忽略 lastIndex 的值，从字符串的起始位置开始搜索。

exec 方法返回的数组有三个属性，分别是 input、index 和 lastIndex。Input 属性包含了整个被查找的字符串。Index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。LastIndex 属性中包含了匹配中最后一个字符的下一个位置。

示例

下面的例子举例说明了 exec 方法的用法：

function RegExpTest(){
  var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
  if (ver >= 5.5){                 // 测试 JScript 的版本。
    var src = "The rain in Spain falls mainly in the plain.";
    var re = /\w+/g;               // 创建正则表达式模式。
    var arr;
    while ((arr = re.exec(src)) != null)
       document.write(arr.index + "-" + arr.lastIndex + "\t" + arr);
  }
  else{
    alert("请使用 JScript 的更新版本");
  }
}

要求

版本 3

See Also

match 方法 | RegExp 对象 | 正则表达式对象方法 | 正则表达式对象属性 | 正则表达式语法 | search 方法 | test 方法

应用于：正则表达式对象


exp 方法

返回 e（自然对数的底）的幂。

Math.exp(number)

必选项 number 参数是数值表达式，用来计算 e 的幂。

说明

返回值为 enumber。常数 e 为自然对数的底，约等于 2.178，number 是给出的参数。

要求

版本 1

请参阅

E 属性 | Math 对象方法

应用于： Math 对象


fixed 方法

把 HTML <TT> 标记放置在 String 对象中的文本两端。

strVariable.fixed( )

必选项 strVariable 参数为任意的 String 对象或文字。

说明

下面的示例说明了 fixed 方法如何工作：

var strVariable = "This is a string object";
strVariable = strVariable.fixed( );

最后一条语句执行完后，strVariable 的值是：

<TT>This is a string object</TT>

不检查该标记是否已经被应用于该字符串了。

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性

应用于： String 对象


floor 方法

返回小于等于其数值参数的最大整数。

Math.floor(number)

必选项 number 参数是数值表达式。

说明

返回值为小于等于其数值参数的最大整数值。

要求

版本 1

请参阅

ceil 方法 | Math 对象方法

应用于： Math 对象


fontcolor 方法

把带有 COLOR 属性的一个 HTML <FONT> 标记放置在 String 对象中的文本两端。

strVariable.fontcolor(colorVal)

参数

strVariable
必选项。任意的 String 对象或文字。
colorVal
必选项。为包含颜色值的字符串值。可以是颜色的十六进制值，或预先定义好的颜色名字。

说明

下面的示例说明了 fontcolor 方法：

var strVariable = "This is a string";
strVariable = strVariable.fontcolor("red");

最后一条语句执行完后，strVariable 的值是：

<FONT COLOR="RED">This is a string</FONT>

有效的预定义颜色名取决于 JScript 主机（浏览器、服务器，等等）。它们也可能由主机版本的不同而不同。详细信息请查阅主机的说明书。

不检查该标记是否已经被应用于该字符串了。

要求

版本 1

请参阅

fontsize 方法 | String 对象的方法 | String 对象的属性

应用于： String 对象


fontsize 方法

把一个带有 SIZE 属性的 HTML <FONT> 标记放置在 String 对象中的文本的两端。

strVariable.fontsize(intSize)

参数

strVariable
必选项。任意的 String 对象或文字。
intSize
必选项。用来指定文本大小的整数值。

说明

下面的示例说明了 fontsize 方法的用法：

var strVariable = "This is a string";
strVariable = strVariable.fontsize(-1);

最后一条语句执行完后，strVariable 的值是：

<FONT SIZE="-1">This is a string</FONT>

有效的整数值取决于 Microsoft JScript 主机。详细信息请参阅主机的说明书。

不检查该标记是否已经被应用于该字符串了。

要求

版本 1

请参阅

fontcolor 方法 | String 对象的方法 | String 对象的属性

应用于： String 对象


fromCharCode 方法

从一些 Unicode 字符值中返回一个字符串。

String.fromCharCode([code1[, code2[, ...[, codeN]]]])

参数

String
必选项。为 String 对象。
code1, . . . , codeN
可选项。是要转换为字符串的 Unicode 字符值序列。如果没有给出参数，结果为空字符串。

说明

在调用 fromCharCode 前不必创建 String 对象。

在下面的例子中，test 包含字符串 "plain"：

var test = String.fromCharCode(112, 108, 97, 105, 110);

要求

版本 3

请参阅

charCodeAt 方法 | String 对象的方法

应用于： String 对象


getDate 方法

返回 Date 对象中用本地时间表示的一个月中的日期值。

dateObj.getDate()

必选项 dateObj 参数为 Date 对象。

说明

要获取用全球标准时间 (UTC) 表示的日期值，请使用 getUTCDate 方法。

返回值是一个处于 1 到 31 之间的整数，它代表了相应的 Date 对象中的日期值。

示例

下面这个例子说明了 getDate 方法的用法：

function DateDemo(){
   var d, s = "今天日期是: ";
   d = new Date();
   s += (d.getMonth() + 1) + "/";
   s += d.getDate() + "/";
   s += d.getYear();
   return(s);
}

要求

版本 1

请参阅

Date 对象的方法 | getUTCDate 方法 | setDate 方法 | setUTCDate 方法

应用于： Date 对象


getDay 方法

返回 Date 对象中用本地时间表示的一周中的日期值。

dateObj.getDay()

必选项 dateObj 参数为 Date 对象。

说明

要获取用全球标准时间 (UTC) 表示的一周中日期值，请使用 getUTCDay 方法。

getDay 方法所返回的值是一个处于 0 到 6 之间的整数，它代表了一周中的某一天，返回值与一周中日期的对应关系如下：

值 | 星期
0 | 星期天
1 | 星期一
2 | 星期二
3 | 星期三
4 | 星期四
5 | 星期五
6 | 星期六

下面这个例子说明了 getDay 方法的用法。

function DateDemo(){
   var d, day, x, s = "今天是: ";
   var x = new Array("星期日", "星期一", "星期二");
   var x = x.concat("星期三","星期四", "星期五");
   var x = x.concat("星期六");
   d = new Date();
   day = d.getDay();
   return(s += x[day]);
}

要求

版本 1

请参阅

Date 对象的方法 | getUTCDay 方法

应用于： Date 对象


getFullYear 方法

返回 Date 对象中用本地时间表示的年份值。

dateObj.getFullYear()

必选项 dateObj 参数为 Date 对象。

说明

要获取用全球标准时间 (UTC) 表示的年份值，请使用 getUTCFullYear 方法。

getFullYear 方法以绝对数字的形式返回年份值。例如，1976 年的返回值就是 1976。这样可以避免出现 2000 年问题，从而不会将 2000 年1月1日以后的日期与 1900 年1月1日以后的日期混淆起来。

下面这个例子说明了 GetFullYear 方法的用法。

function DateDemo(){
   var d, s = "今天 UTC 日期是: ";
   d = new Date();
   s += (d.getMonth() + 1) + "/";
   s += d.getDate() + "/";
   s += d.getFullYear();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getUTCFullYear 方法 | setFullYear 方法 | setUTCFullYear 方法

应用于： Date 对象


getHours 方法

返回 Date 对象中用本地时间表示的小时值。

dateObj.getHours()

必选项 dateObj 参数为 Date 对象。

说明

要获取用全球标准时间 (UTC) 表示的小时值，请使用 getUTCHours 方法。

getHours 方法返回一个处于 0 到 23 之间的整数，这个值表示从午夜开始计算的小时数。在下面两种情况下此方法的返回值是 0：时间在 1:00:00 am 之前，或者在创建 Date 对象的时候没有将时间保存在该对象中。而要确定究竟是哪种情况，唯一的方法就是进一步检查分钟和秒钟值是否也是 0。如果这两个值都是 0，那就几乎可以确定是没有将时间值保存到 Date 对象中。

下面这个例子说明了 getHours 方法的用法。

function TimeDemo(){
   var d, s = "当前本地时间为: ";
   var c = ":";
   d = new Date();
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds() + c;
   s += d.getMilliseconds();
   return(s);
}

要求

版本 1

请参阅

Date 对象的方法 | getUTCHours 方法 | setHours 方法 | setUTCHours 方法

应用于： Date 对象


getItem 方法

返回指定位置的项。

safeArray.getItem(dimension1[, dimension2, ...], dimensionN)

参数

safeArray
必选项。是一个 VBArray 对象。
dimension1, ..., dimensionN
指定所需的 VBArray 元素的确切位置。n 等于 VBArray 的维数。

示例

下面的示例包括三个部分。第一部分是用来创建一个 Visual Basic 安全数组的 VBScript 代码。第二部分是 JScript 代码，遍历该安全数组并打印每个元素的内容。这两部分都放在 HTML 页中的 <HEAD> 部分。第三部分是位于 <BODY> 部分的 JScript 代码，用来运行其他两个部分。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(i, j) = k
         document.writeln(k)
         k = k + 1
      Next
      document.writeln("<BR>")
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>
<SCRIPT LANGUAGE="JScript">
<!--
function GetItemTest(vbarray)
{
   var i, j;
   var a = new VBArray(vbarray);
   for (i = 0; i <= 2; i++)
   {
      for (j =0; j <= 2; j++)
      {
         document.writeln(a.getItem(i, j));
      }
   }
}-->
</SCRIPT>
</HEAD>
&ltBODY>
<SCRIPT LANGUAGE="JScript">
<!--
   GetItemTest(CreateVBArray());
-->
</SCRIPT>
</BODY>

要求

版本 1

请参阅

dimensions 方法 | lbound 方法 | toArray 方法 | ubound 方法

应用于： VBArray 对象


getMilliseconds 方法

返回 Date 对象中用本地时间表示的毫秒值。

dateObj.getMilliseconds()

必选项 dateObj 参数为 Date 对象。

说明

要获取用全球标准时间 (UTC) 表示的毫秒值，请使用 getUTCMilliseconds 方法。

所返回的毫秒值处于 0-999 之间。

示例

下面这个例子说明了 getMilliseconds 方法的用法：

function TimeDemo(){
   var d, s = "当前本地时间为: ";
   var c = ":";
   d = new Date();
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds() + c;
   s += d.getMilliseconds();
   return(s);
}

要求

版本 3

参阅

Date 对象方法 | getUTCMilliseconds 方法 | setMilliseconds 方法 | setUTCMilliseconds 方法

应用于：Date 对象


getMinutes 方法

返回 Date 对象中用本地时间表示的分钟值。

dateObj.getMinutes()

必选项 dateObj 参数为 Date 对象。

说明

要获取用全球标准时间 (UTC) 表示的分钟值，请使用 getUTCMinutes 方法。

getMinutes 方法返回一个处于 0 到 59 之间的整数，返回值就等于保存在 Date 对象中的分钟值。在下面两种情况下返回值为 0：在时钟整点之后经过的时间少于一分钟，或者是在创建 Date 对象的时候没有将时间值保存到该对象中。而要确定究竟是哪种情况，唯一的方法是同时检查小时和秒钟值是否也是 0。如果这两个值都是 0，那就几乎可以确定是没有将时间值保存到该 Date 对象中。

示例

下面这个例子说明了 getMinutes 方法的用法：

function TimeDemo(){
   var d, s = "当前本地时间为: ";
   var c = ":";
   d = new Date();
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds() + c;
   s += d.getMilliseconds();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getUTCMinutes 方法 | setMinutes 方法 | setUTCMinutes 方法

应用于： Date 对象


getMonth 方法

返回 Date 对象中用本地时间表示的月份值。

dateObj.getMonth()

必选项 dateObj 参数为 Date 对象。

说明

要获取用全球标准时间 (UTC)表示的月份值，请使用 getUTCMonth 方法。

getMonth 方法返回一个处于 0 到 11 之间的整数，它代表 Date 对象中的月份值。这个整数并不等于按照惯例来表示月份的数字，而是要比按惯例表示的值小 1。如果一个 Date 对象中保存的时间值是 "Jan 5, 1996 08:47:00"，那么 getMonth 方法就会返回 0。

示例

下面这个例子说明了 getMonth 方法的用法：

function DateDemo(){
   var d, s = "今天日期是: ";
   d = new Date();
   s += (d.getMonth() + 1) + "/";
   s += d.getDate() + "/";
   s += d.getYear();
   return(s);
}

要求

版本 1

请参阅

Date 对象的方法 | getUTCMonth 方法 | setMonth 方法 | setUTCMonth 方法

应用于： Date 对象


getSeconds 方法

返回 Date 对象中用本地时间表示的秒钟值。

dateObj.getSeconds()

必选项 dateObj 参数 Date 对象。

说明

要获取用全球标准时间 (UTC) 表示的秒钟值，请使用 getUTCSeconds 方法。

getSeconds 方法返回一个处于 0 到 59 之间的整数，它表示了相应的 Date 对象中的秒钟值。在下面两种情况下，返回值为 0。第一种情况是在当前的一分钟中所经过的时间少于一秒。另外一种情况是在创建 Date 对象时没有将时间值保存到该对象中。而为了确定究竟属于哪种情况，唯一的方法是同时检查小时和分钟值是否也都是 0。如果这两个值都是 0，那就几乎可以确定是没有将时间值保存到 Date 对象中。

示例

下面这个例子说明了 getSeconds 方法的用法：

function TimeDemo(){
   var d, s = "当前本地时间为: ";
   var c = ":";
   d = new Date();
   s += d.getHours() + c;
   s += d.getMinutes() + c;
   s += d.getSeconds() + c;
   s += d.getMilliseconds();
   return(s);
}

要求

版本 1

请参阅

Date 对象的方法 | getUTCSeconds 方法 | setSeconds 方法 | setUTCSeconds 方法

应用于： Date 对象


getTime 方法

返回 Date 对象中的时间值。

dateObj.getTime()

必选项 dateObj 参数为 Date 对象。

说明

getTime 方法返回一个整数值，这个整数代表了从 1970 年 1 月 1 日开始计算到 Date 对象中的时间之间的毫秒数。日期的范围大约是 1970 年 1 月 1 日午夜的前后各 285,616 年。负数代表 1970 年之前的日期。

在进行各种日期和时间换算的时候，可以定义一些变量来表示一天、一个小时或一分钟中包含的毫秒数。这样做通常是很有帮助的。例如：

var MinMilli = 1000 * 60
var HrMilli = MinMilli * 60
var DyMilli = HrMilli * 24

示例

下面这个例子说明了 getTime 方法的用法：

function GetTimeTest(){
   var d, s, t;
   var MinMilli = 1000 * 60;
   var HrMilli = MinMilli * 60;
   var DyMilli = HrMilli * 24;
   d = new Date();
   t = d.getTime();
   s = "It's been "
   s += Math.round(t / DyMilli) + " days since 1/1/70";
   return(s);
}

要求

版本 1

请参阅

Date 对象的方法 | setTime 方法

应用于： Date 对象


getTimezoneOffset 方法

返回用分钟表示的主计算机上的时间和全球标准时间 (UTC) 之间的差别。

dateObj.getTimezoneOffset()

必选项 dateObj 参数为 Date 对象。

说明

getTimezoneOffset 方法返回一个整数值，这个整数代表了当前计算机上的时间和 UTC 之间相差的分钟数。这些值和执行脚本的计算机相关。如果这个方法被一个服务器脚本调用，那返回值和服务器相关。而如果这个方法被一个客户机脚本调用，那么返回值就根据客户机上的时间来确定。

如果所在位置的时间落后于 UTC (比如， Pacific Daylight Time)，那么这个值就是正值，而如果所在位置的时间超前于 UTC (比如说， Japan)，那么这个值就是负值。

例如，假设在 12 月 1 日，一台位于 Los Angeles 的客户机与一台位于 New York City 的服务器进行联络。如果在客户机上执行，getTimezoneOffset 方法将返回 480，而如果在服务器上执行此方法将返回 300。

示例

下面这个例子说明了 getTimezoneOffset 方法的用法。

function TZDemo(){
   var d, tz, s = " The current local time is ";
   d = new Date();
   tz = d.getTimezoneOffset();
   if (tz < 0)
      s += tz / 60 + " hours before GMT";
   else if (tz == 0)
      s += "GMT";
   else
      s += tz / 60 + " hours after GMT";
   return(s);
}

要求

版本 1

请参阅

Date 对象的方法

应用于： Date 对象


getUTCDate 方法

返回 Date 对象中用全球标准时间 (UTC) 表示的日期。

dateObj.getUTCDate()

必选项 dateObj 参数为 Date 对象。

说明

要获取用本地时间表示的日期，请使用 getDate 方法。

返回值是一个处于 1 到 31 之间的整数值，这个整数代表了 Date 对象中的日期值。

示例

下面这个例子说明了 getUTCDate 方法的用法。

function UTCDateDemo(){
   var d, s = "今天 UTC 日期是: ";
   d = new Date();
   s += (d.getUTCMonth() + 1) + "/";
   s += d.getUTCDate() + "/";
   s += d.getUTCFullYear();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getDate 方法 | setDate 方法 | setUTCDate 方法

应用于： Date 对象


getUTCDay 方法

返回 Date 对象中用全球标准时间 (UTC) 表示的一周中的日期值。

dateObj.getUTCDay()

必选项 dateObj 参数为 Date 对象。

说明

要获取用本地时间表示的一周中的日期值，请使用 getDate 方法。

getUTCDay 方法的返回值是一个处于 0 到 6 之间的整数，它代表了一周中的某一天，返回值与一周中日期的对应关系如下：

值 | 星期
0 | 星期天
1 | 星期一
2 | 星期二
3 | 星期三
4 | 星期四
5 | 星期五
6 | 星期六

示例

下面这个例子说明了 getUTCDay 方法的用法。

function DateDemo(){
   var d, day, x, s = "今天是";
   var x = new Array("星期日", "星期一", "星期二");
   x = x.concat("星期三","星期四", "星期五");
   x = x.concat("星期六");
   d = new Date();
   day = d.getUTCDay();
   return(s += x[day]);
}

要求

版本 3

请参阅

Date 对象的方法 | getDay 方法

应用于： Date 对象


getUTCFullYear 方法

返回 Date 对象中用全球标准时间 (UTC) 表示的年份值。

dateObj.getUTCFullYear()

必选项 dateObj 参数 Date 对象。

说明

要获取用本地时间表示的年份值，请使用 getFullYear 方法。

getUTCFullYear 方法以绝对数字的形式返回年份值。这样可以避免出现 2000 年问题，从而不会将 2000 年 1 月 1 日以后的日期与 1900 年 1 月 1 日以后的日期混淆起来。

示例

下面这个例子说明了 getUTCFullYear 方法的用法。

function UTCDateDemo(){
   var d, s = "今天 UTC 日期是: ";
   d = new Date();
   s += (d.getUTCMonth() + 1) + "/";
   s += d.getUTCDate() + "/";
   s += d.getUTCFullYear();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getFullYear 方法 | setFullYear 方法 | setUTCFullYear 方法

应用于： Date 对象


getUTCHours 方法

返回 Date 对象中用全球标准时间 (UTC) 表示的小时值。

dateObj.getUTCHours()

必选项 dateObj 参数为 Date 对象。

说明

要获取用本地时间表示的，从午夜开始已经过的小时数，请使用 getHours 方法。

getUTCHours 方法返回一个处于 0 到 23 之间的整数，这个整数代表了从午夜开始所经过的小时数。在下面两种情况下返回值为 0：时间在 1:00:00 A.M. 之前或者在创建 Date 对象的时候没有将时间值保存到该对象中。而要确定究竟属于哪种情况，唯一的办法就是同时检查分钟和秒钟值是否都是 0。如果这两个值都是 0，那么就几乎可以确定是没有将时间值保存到 Date 对象中。

示例

下面这个例子说明了 getUTCHours 方法的用法。

function UTCTimeDemo(){
   var d, s = "当前全球标准时间 (UTC) 是: ";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getHours 方法 | setHours 方法 | setUTCHours 方法

应用于： Date 对象


getUTCMilliseconds 方法

返回 Date 对象中用全球标准时间 (UTC) 表示的毫秒值。

dateObj.getUTCMilliseconds()

必选项 dateObj 参数为 Date 对象。

说明

要获取用本地时间表示的毫秒数，请使用 getMilliseconds 方法。

返回的毫秒值的范围是 0-999。

示例

下面这个例子说明了 getUTCMilliseconds 方法的用法。

function UTCTimeDemo(){
   var d, s = "当前全球标准时间 (UTC) 是: ";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getMilliseconds 方法 | setMilliseconds 方法 | setUTCMilliseconds 方法

应用于： Date 对象


getUTCMinutes 方法

返回 Date 对象中用全球标准时间 (UTC) 表示的分钟值。

dateObj.getUTCMinutes()

必选项 dateObj 参数为 Date 对象。

说明

要获得用本地时间表示的所保存的分钟数，请使用 getMinutes 方法。

getUTCMinutes 方法返回一个处于 0 到 59 之间的整数，这个整数就等于包含在 Date 对象中的分钟数的值。在下列两种情况下返回值为 0：在整点过后的时间短于 1 分钟，或者在创建 Date 对象的时候没有将时间值保存到对象之中。而要确定究竟属于哪种情况，唯一的方法就是同时检查小时和秒钟值是否都是 0。如果这两个值都是 0，那么几乎可以肯定是没有将时间保存到 Date 对象中。

示例

下面这个例子说明了 getUTCMinutes 方法的用法。

function UTCTimeDemo()
{
   var d, s = "当前全球标准时间 (UTC) 是: ";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getMinutes 方法 | setMinutes 方法 | setUTCMinutes 方法

应用于： Date 对象


getUTCMonth 方法

返回 Date 对象中用全球标准时间 (UTC) 表示的月份值。

dateObj.getUTCMonth()

必选项 dateObj 参数为 Date 对象。

说明

要获得用本地时间表示的月份，请使用 getMonth 方法。

getUTCMonth 方法返回一个处于 0 到 11 之间的整数，这个整数就表示 Date 对象中的月份值。所返回值并不等于按惯例来表示月份的数字。而是要比按惯例来表示月份的数字小 1。如果一个 Date 对象中保存的值是"Jan 5, 1996 08:47:00.0"，那么 getUTCMonth 将返回 0。

示例

下面这个例子说明了 getUTCMonth 方法的用法。

function UTCDateDemo(){
   var d, s = "今天 UTC 日期是: ";
   d = new Date();
   s += (d.getUTCMonth() + 1) + "/";
   s += d.getUTCDate() + "/";
   s += d.getUTCFullYear();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getMonth 方法 | setMonth 方法 | setUTCMonth 方法

应用于： Date 对象


getUTCSeconds 方法

返回 Date 对象中用全球标准时间 (UTC) 表示的秒钟值。

dateObj.getUTCSeconds()

必选项 dateObj 参数为 Date 对象。

说明

要获得用本地时间表示的秒钟数，请使用 getSeconds 方法。

getUTCSeconds 方法返回一个处于 0 到 59 之间的整数，这个整数表示相应的 Date 对象中的秒钟数。在下面两种情况下返回值为 0：在当前的一分钟中所经过的时间短于 1 秒钟，或者在创建 Date 对象的时候没有将时间保存到该对象中。而为了确定究竟属于哪种情况，唯一的方法就是同时检查分钟和小时值是否为 0。如果这两个值也都是 0，那么几乎可以确定是没有将时间保存到 Date 对象中。

示例

下面这个例子说明了 getUTCSeconds 方法的用法。

function UTCTimeDemo(){
   var d, s = "当前 UTC 时间为: ";
   var c = ":";
   d = new Date();
   s += d.getUTCHours() + c;
   s += d.getUTCMinutes() + c;
   s += d.getUTCSeconds() + c;
   s += d.getUTCMilliseconds();
   return(s);
}

要求

版本 3

请参阅

Date 对象的方法 | getSeconds 方法 | setSeconds 方法 | setUTCSeconds 方法

应用于： Date 对象


getVarDate 方法

返回 Date 对象中的 VT_DATE 值。

dateObj.getVarDate()

必选项 dateObj 参数为 Date 对象。

说明

当与 COM 对象、ActiveX® 对象或其他以 VT_DATE 格式接受和返回日期值的对象（例如 Visual Basic 和 VBScript）进行交互时，使用 getVarDate 方法。实际格式取决于地区设置，不随 JScript 变化。

要求

版本 3

请参阅

getDate 方法 | parse 方法

应用于： Date 对象


getYear 方法

返回 Date 对象中的年份值。

dateObj.getYear()

必选项 dateObj 参数为 Date 对象。

说明

这个方法已经过时，之所以提供这个方法，是为了保持向后的兼容性。请改用 getFullYear 方法。

对于1900-1999这段时间而言，返回的年份值是一个两位数字的整数，它代表了所保存的年份与 1900 年之间的差距。而对于其它的年份，返回值是一个四位的整数。例如，1996 年的返回值是 96，而 1825 和 2025 年的返回值则相应地为 1825 和 2025。

注意 对于 JScript 1.0 版，getYear 返回的值始终为 Date 对象中的年份与 1900 年之间的差距。例如，1899 年的返回值是 -1， 而 2000 年的返回值是 100。

示例

下面这个例子说明了 getYear 方法的用法。

function DateDemo(){
   var d, s = "今天日期是: ";
   d = new Date();
   s += (d.getMonth() + 1) + "/";
   s += d.getDate() + "/";
   s += d.getYear();
   return(s);
}

要求

版本 1

请参阅

Date 对象的方法 | getFullYear 方法 | getUTCFullYear 方法 | setFullYear 方法 | setUTCFullYear 方法 | setYear 方法

应用于： Date 对象


indexOf 方法

返回 String 对象内第一次出现子字符串的字符位置。

strObj.indexOf(subString[, startIndex])

参数

strObj
必选项。String 对象或文字。
subString
必选项。要在 String 对象中查找的子字符串。
starIndex
可选项。该整数值指出在 String 对象内开始查找的索引。如果省略，则从字符串的开始处查找。

说明

indexOf 方法返回一个整数值，指出 String 对象内子字符串的开始位置。如果没有找到子字符串，则返回 -1。

如果 startindex 是负数，则 startindex 被当作零。如果它比最大的字符位置索引还大，则它被当作最大的可能索引。

从左向右执行查找。否则，该方法与 lastIndexOf 相同。

示例

下面的示例说明了 indexOf 方法的用法。

function IndexDemo(str2){
   var str1 = "BABEBIBOBUBABEBIBOBU"
   var s = str1.indexOf(str2);
   return(s);
}

要求

版本 1

请参阅

lastIndexOf 方法 | String 对象的方法 | String 对象的属性

应用于： String 对象


isFinite 方法

返回一个 Boolean 值,指明所提供的数字是否是有限的。

isFinite(number)

必选项 number 参数为任意的数值。

说明

如果 number 不是 NaN 、负无穷或正无穷，那么 isFinite 方法将返回 true 。如果是这三种情况，函数返回 false 。

要求

版本 3

请参阅

isNaN 方法

应用于： Global 对象


isNaN 方法

返回一个 Boolean 值，指明提供的值是否是保留值 NaN （不是数字）。

isNaN(numValue)

必选项 numvalue 参数为要检查是否为 NAN 的值。

说明

如果值是 NaN， 那么 isNaN 函数返回 true ，否则返回 false 。使用这个函数的典型情况是检查 parseInt 和 parseFloat 方法的返回值。

还有一种办法，变量可以与它自身进行比较。如果比较的结果不等，那么它就是 NaN 。这是因为 NaN 是唯一与自身不等的值。

要求

版本 1

请参阅

isFinite 方法 | NaN 属性 (Global) | parseFloat 方法 | parseInt 方法

应用于： Global 对象


italics 方法

把 HTML <I> 标记放置在 String 对象中的文本两端。

strVariable.italics( )
"String Literal".italics( )

说明

下面的示例说明了 italics 方法是如何工作的：

var strVariable = "This is a string";
strVariable = strVariable.italics( );

最后一条语句执行完后，strVariable 的值是：

<I>This is a string</I>

不检查该标记是否已经被应用于该字符串了。

要求

版本 1

请参阅

bold 方法 | String 对象的方法 | String 对象的属性

应用于： String 对象


item 方法

返回集合中的当前项。

enumObj.item()

必选项 myEnum 参数为任意 Enumerator 对象。

说明

item 方法返回当前项。如果集合为空或者当前项没有定义，那么将返回undefined 。

示例

在下面的代码中，使用了 item 方法返回 Drives 集合中的一个成员。

function ShowDriveList(){
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[驱动器未就绪]";
      s +=  n + "<br>";
   }
   return(s);
}

要求

版本 3

请参阅

atEnd 方法 | moveFirst 方法 | moveNext 方法

应用于： Enumerator 对象


join 方法

返回字符串值，其中包含了连接到一起的数组的所有元素，元素由指定的分隔符分隔开来。

arrayObj.join(separator)

参数

arrayObj
必选项。Array 对象。
separator
必选项。是一个 String 对象，作为最终的 String 对象中对数组元素之间的分隔符。如果省略了这个参数，那么数组元素之间就用一个逗号来分隔。

说明

如果数组中有元素没有定义或者为 null，将其作为空字符串处理。

示例

下面这个例子说明了 join 方法的用法。

function JoinDemo(){
   var a, b;
   a = new Array(0,1,2,3,4);
   b = a.join("-");
   return(b);
}

要求

版本 2

请参阅

Array 对象的方法 | String 对象

应用于： Array 对象


lastIndexOf 方法

返回 String 对象中子字符串最后出现的位置。

strObj.lastIndexOf(substring[, startindex])

参数

strObj
必选项。String 对象或文字。
substring
必选项。要在 String 对象内查找的子字符串。
startindex
可选项。该整数值指出在 String 对象内进行查找的开始索引位置。如果省略，则查找从字符串的末尾开始。

说明

lastIndexOf 方法返回一个整数值，指出 String 对象内子字符串的开始位置。如果没有找到子字符串，则返回 -1。

如果 startindex 是负数，则 startindex 被当作零。如果它比最大字符位置索引还大，则它被当作最大的可能索引。

从右向左执行查找。否则，该方法和 indexOf 相同。

下面的示例说明了 lastIndexOf 方法的用法：

function lastIndexDemo(str2)
{
   var str1 = "BABEBIBOBUBABEBIBOBU"
   var s = str1.lastIndexOf(str2);
   return(s);
}

要求

版本 1

请参阅

indexOf 方法 | String 对象的方法 | String 对象的属性

应用于： String 对象


lbound 方法

返回在 VBArray 的指定维中所使用的最小索引值。

safeArray.lbound(dimension)

参数

safeArray
必选项。是一个 VBArray 对象。
dimension
可选项。要获知其索引下界的 VBArray 的维数。如果忽略，lbound 将该参数作为 1 进行处理。

说明

如果 VBArray 为空，lbound 方法将返回 undefined。如果 dimension 大于 VBArray 的维数或为负数，该方法将产生一个“下标越界”的错误。

示例

下面的示例包括三个部分。第一部分是用来创建一个 Visual Basic 安全数组的 VBScript 代码。第二部分是 JScript 代码，确定该安全数组的维数和每一维的下界。由于该安全数组是用 VBScript 而不是 Visual Basic 创建的，因此下界始终为 0。这两部分都放在 HTML 页中的 <HEAD> 部分。第三部分是位于 <BODY> 部分的 JScript 代码，用来运行其他两个部分。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         k = k + 1
      Next
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vba){
   var i, s;
   var a = new VBArray(vba);
   for (i = 1; i <= a.dimensions(); i++)
   {
      s = "The lower bound of dimension ";
      s += i + " is ";
      s += a.lbound(i)+ ".<BR>";
      return(s);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT language="jscript">
   document.write(VBArrayTest(CreateVBArray()));
</SCRIPT>
</BODY>

要求

版本 3

请参阅

dimensions 方法 | getItem 方法 | toArray 方法 | ubound 方法

应用于： VBArray 对象


link 方法

把一个有 HREF 属性的 HTML 锚点放置在 String 对象中的文本两端。

strVariable.link(linkstring)
"String Literal".link(linkstring)

linkstring 参数是想要放置在 HTML 锚点的 HREF 属性中的文本。

说明

调用 link 方法来创建 String 对象外部的超链接。下面就是该方法如何实现这种功能的一个例子：

var strVariable = "This is a hyperlink";
strVariable = strVariable.link("http://www.microsoft.com");

最后一条语句执行完后，strVariable 的值是：

<a href="http://www.microsoft.com">This is a hyperlink</A>

不检查该标记是否已经被应用于该字符串了。

要求

版本 1

请参阅

anchor 方法 | String 对象的方法 | String 对象的属性

应用于： String 对象


localeCompare 方法

返回一个值，指出在当前的区域设置中两个字符串是否相同。

stringVar.localeCompare(stringExp)

参数

stringVar
必选项。一个 String 对象后文字。
stringExp
必选项。将与 stringVar 进行比较的字符串。

说明

localeCompare 可以对 stringVar 和 stringExp 进行一个区分区域设置的字符串比较并返回 –1、0 或 +1，这取决于系统中缺省区域设置的排序。

如果 stringVar 排序在 stringExp 之前，那么 localeCompare 返回 –1；如果 stringVar 排序在 stringExp 之后，则返回 +1。如果返回值为 0，那就说明这两个字符串是相同的。

要求

版本 5.5

请参阅

toLocalString

应用于：String 对象


log 方法

返回数字的自然对数。

Math.log(number)

必选项 number 参数是要计算自然对数的数值表达式。

返回值

返回值为 number 的自然对数，底为 e。

要求

版本 1

请参阅

Math 对象方法

应用于： Math 对象


match 方法

使用正则表达式模式对字符串执行查找，并将包含查找的结果作为数组返回。

stringObj.match(rgExp)

参数

stringObj
必选项。对其进行查找的 String 对象或字符串文字。
rgExp
必选项。为包含正则表达式模式和可用标志的正则表达式对象。也可以是包含正则表达式模式和可用标志的变量名或字符串文字。

说明

如果 match 方法没有找到匹配，返回 null。如果找到匹配返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。

match 方法返回的数组有三个属性：input、index 和 lastIndex。Input 属性包含整个的被查找字符串。Index 属性包含了在整个被查找字符串中匹配的子字符串的位置。LastIndex 属性包含了最后一次匹配中最后一个字符的下一个位置。

如果没有设置全局标志 (g)，数组的 0 元素包含整个匹配，而第 1 到 n 元素包含了匹配中曾出现过的任一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志，元素 0 到 n 中包含所有匹配。

示例

下面的示例演示了match 方法的用法：

function MatchDemo(){
   var r, re;         // 声明变量。
   var s = "The rain in Spain falls mainly in the plain";
   re = /ain/i;    // 创建正则表达式模式。
   r = s.match(re);   // 尝试匹配搜索字符串。
   return(r);         // 返回第一次出现 "ain" 的地方。
}

本示例说明带 g 标志设置的 match 方法的用法。

function MatchDemo(){
   var r, re;         // 声明变量。
   var s = "The rain in Spain falls mainly in the plain";
   re = /ain/ig;      // 创建正则表达式模式。
   r = s.match(re);   // 尝试去匹配搜索字符串。
   return(r);         // 返回的数组包含了所有 "ain"
                      // 出现的四个匹配。
}

下面几行代码演示了字符串文字的 match 方法的用法。

var r, re = "Spain";
r = "The rain in Spain".replace(re, "Canada");

要求

版本 3

请参阅

exec 方法 | RegExp 对象 | replace 方法 | search 方法 | String 对象的方法 | test 方法

应用于： String 对象


max 方法

返回给出的零个或多个数值表达式中较大者。

Math.max([number1[, number2[. . . [,numberN]]]])

可选项 number1, number2, . . ., numberN 参数为需要进行比较的数值表达式。

说明

如果没有给出参数，返回值等于 NEGATIVE_INFINITY。如果有参数为 NaN，返回值仍然为 NaN。

要求

版本 1

请参阅

Math 对象方法 | min 方法| NEGATIVE_INFINITY 属性

应用于： Math 对象


min 方法

返回给出的零个或多个数值表达式中较小的值。

Math.min([number1[, number2[. . . [,numberN]]]])

可选项 number1, number2, . . ., numberN 参数为需要进行比较的数值表达式。

说明

如果没有给出参数，返回值等于 POSITIVE_INFINITY。如果有参数为 NaN，返回值也为 NaN。

要求

版本 1

请参阅

Math 对象方法 | max 方法 | POSITIVE_INFINITY 属性

应用于： Math 对象


moveFirst 方法

重新将集合中的当前项设置为第一项。

enumObj.moveFirst( )

必选项 enumObj 参数为任意的 Enumerator 对象。

说明

如果集合中没有项，那么当前项将被设置为 undefined。

示例

在下面的例子中，使用了 moveFirst 方法从列表的开始处对 Drives 集合的成员进行计算：

function ShowFirstAvailableDrive(){
   var fso, s, e, x;                // 声明变量。
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);  // 创建 Enumerator 对象。
   e.moveFirst();                   // 移到第一个驱动器。
   s = "";                          // 初始化 s
   do
   {
      x = e.item();                 // 测试驱动器的存在与否。
      if (x.IsReady)                // 是否已准备好。
      {
         s = x.DriveLetter + ":";   // 给第一个驱动器号赋值给 s。
         break;
      }
      else
         if (e.atEnd())             // 是否在集合的结尾。
         {
            s = "没有可用的驱动器";
            break;
         }
      e.moveNext();                 // 移到下一个驱动器。
   }
   while (!e.atEnd());              // 执行循环，直到集合的结尾。
   return(s);                       // 返回可用驱动器的列表。
}

要求

版本 3

请参阅

atEnd 方法 | item 方法 | moveNext 方法

应用于： Enumerator 对象


moveNext 方法

将集合中的当前项移动到下一项。

enumObj.moveNext( )

必选项 myEnum 参数是任意 Enumerator 对象。

说明

如果枚举算子位于集合的最后，或者集合为空，那么当前项将被设置为 undefined。

在下面的例子中，使用了 moveNext 方法在 Drives 集合中向下一个驱动器移动：

function ShowDriveList(){
   var fso, s, n, e, x;                 // 声明变量。
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);      // 创建 Enumerator 对象。
   s = "";                              //初始化 s。
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;            // 加驱动器号
      s += " - ";                       // 加 "-" 字符。
      if (x.DriveType == 3)
         n = x.ShareName;               // 加共享名。
      else if (x.IsReady)
         n = x.VolumeName;              // 加卷名。
      else
         n = "[驱动器未就绪]";       // 指明驱动器未就绪。
      s +=   n + "\n";
   }
   return(s);                           // 返回驱动器状态。
}

要求

版本 3

请参阅

atEnd 方法 | item 方法 | moveFirst 方法

应用于： Enumerator 对象


parse 方法

解析一个包含日期的字符串，并返回该日期与 1970 年 1 月 1 日午夜之间所间隔的毫秒数。

Date.parse(dateVal)

其中必选项 dateVal 是一个包含以诸如 "Jan 5, 1996 08:47:00" 的格式表示的日期的字符串，或者是一个从 ActiveX® 对象或其他对象中获取的 VT_DATE 值。

说明

parse 方法返回一个整数值，这个整数表示 dateVal 中所包含的日期与 1970 年 1 月 1 日午夜之间相间隔的毫秒数。

parse 方法是 Date 对象的一个静态方法。正因为它是一个静态方法，它是通过下面例子中所示的方法被调用的，而不是作为一个已创建 Date 对象的一个方法被调用。

var datestring = "November 1, 1997 10:15 AM";
Date.parse(datestring)

下面这些规则决定了 parse 方法能够成功地解析那些字符串：

  • 短日期可以使用“/”或“-”作为日期分隔符，但是必须用月/日/年的格式来表示，例如"7/20/96"。
  • 以 "July 10 1995" 形式表示的长日期中的年、月、日可以按任何顺序排列，年份值可以用 2 位数字表示也可以用 4 位数字表示。如果使用 2 位数字来表示年份，那么该年份必须大于或等于 70。
  • 括号中的任何文本都被视为注释。这些括号可以嵌套使用。
  • 逗号和空格被视为分隔符。允许使用多个分隔符。
  • 月和日的名称必须具有两个或两个以上的字符。如果两个字符所组成的名称不是独一无二的，那么该名称就被解析成最后一个符合条件的月或日。例如，"Ju" 被解释为七月而不是六月。
  • 在所提供的日期中，如果所指定的星期几的值与按照该日期中剩余部分所确定的星期几的值不符合，那么该指定值就会被忽略。例如，尽管 1996 年 11 月 9 日实际上是星期五，"Tuesday November 9 1996" 也还是可以被接受并进行解析的。但是结果 Date 对象中包含的是 "Friday November 9 1996"。
  • JScript 处理所有的标准时区，以及全球标准时间 (UTC) 和格林威治标准时间 (GMT)。
  • 小时、分钟、和秒钟之间用冒号分隔，尽管不是这三项都需要指明。"10:"、"10:11"、和 "10:11:12" 都是有效的。
  • 如果使用 24 小时计时的时钟，那么为中午 12 点之后的时间指定 "PM" 是错误的。例如 "23:15 PM" 就是错误的。
  • 包含无效日期的字符串是错误的。例如，一个包含有两个年份或两个月份的字符串就是错误的。

示例

下面这个例子说明了 parse 方法的用法：

function GetTimeTest(testdate){
   var s, t;                    // 声明变量。
   var MinMilli = 1000 * 60;       // 初始化变量。
   var HrMilli = MinMilli * 60;
   var DyMilli = HrMilli * 24;
   t = Date.parse(testdate);       // 解析 testdate。
   s = "There are "                // 创建返回的字符串。
   s += Math.round(Math.abs(t / DyMilli)) + " days "
   s += "between " + testdate + " and 1/1/70";
   return(s);                      // 返回结果。
}

要求

版本 1

请参阅

Date 对象的方法

应用于： Date 对象


parseFloat 方法

返回由字符串转换得到的浮点数。

parseFloat(numString)

必选项 numString 参数是包含浮点数的字符串。

说明

parseFloat 方法返回与 numString 中保存的数相等的数字表示。如果 numString 的前缀不能解释为浮点数，则返回 NaN （而不是数字）。

parseFloat("abc")      // 返回 NaN。
parseFloat("1.2abc")   // 返回 1.2。

可以用 isNaN 方法检测 NaN。

要求

版本 1

请参阅

isNaN 方法 | parseInt 方法 | String 对象

应用于： Global 对象


parseInt 方法

返回由字符串转换得到的整数。

parseInt(numString, [radix])

参数

numString
必选项。要转换为数字的字符串。
radix
可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供，则前缀为 '0x' 的字符串被当作十六进制，前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。

说明

parseInt 方法返回与保存在 numString 中的数字值相等的整数。如果 numString 的前缀不能解释为整数，则返回 NaN（而不是数字）。

parseInt("abc")     // 返回 NaN。
parseInt("12abc")   // 返回 12。

可以用 isNaN 方法检测 NaN。

要求

版本 1

请参阅

isNaN 方法 | parseFloat 方法 | String 对象 | valueOf 方法

应用于： Global 对象


pop 方法

移除数组中的最后一个元素并返回该元素。

arrayObj.pop( )

必选的 arrayObj 引用是一个 Array 对象。

说明

如果该数组为空，那么将返回 undefined。

要求

版本 5.5

请参阅

push 方法

应用于：Array 对象


pow 方法

返回底表达式的指定次幂。

Math.pow(base, exponent)

参数

base
必选项。表达式底的值。
exponent
必选项。表达式的指数值。

示例

在下面的例子中，等同于 baseexponent 的数值表达式，返回值为 1000。

Math.pow(10,3);

要求

版本 1

请参阅

Math 对象方法

应用于： Math 对象


push 方法

将新元素添加到一个数组中，并返回数组的新长度值。

arrayObj.push([item1 [item2 [. . . [itemN ]]]])

参数

arrayObj
必选项。一个 Array 对象。
item, item2,. . . itemN
可选项。该 Array 的新元素。

说明

push 方法将以新元素出现的顺序添加这些元素。如果参数之一为数组，那么该数组将作为单个元素添加到数组中。如果要合并两个或多个数组中的元素，请使用 concat 方法。

要求

版本 5.5

请参阅

concat 方法 | pop 方法

应用于：Array 对象


random 方法

返回介于 0 和 1 之间的伪随机数。

Math.random( )

说明

产生的伪随机数介于 0 和 1 之间（含 0，不含 1），也就是，返回值可能为0，但总是小于1。在第一次加载 JScript 时随机数发生器自动产生 。

要求

版本 1

请参阅

Math 对象方法

应用于：Math 对象


replace 方法

返回根据正则表达式进行文字替换后的字符串的复制。

stringObj.replace(rgExp, replaceText)

参数

stringObj
必选项。要执行该替换的 String 对象或字符串文字。该字符串不会被 replace 方法修改。
rgExp
必选项。为包含正则表达式模式或可用标志的正则表达式对象。也可以是 String 对象或文字。如果 rgExp 不是正则表达式对象，它将被转换为字符串，并进行精确的查找；不要尝试将字符串转化为正则表达式。
replaceText
必选项。是一个String 对象或字符串文字，对于stringObj 中每个匹配 rgExp 中的位置都用该对象所包含的文字加以替换。在 Jscript 5.5 或更新版本中，replaceText 参数也可以是返回替换文本的函数。

说明

replace 方法的结果是一个完成了指定替换的 stringObj 对象的复制。

下面任意的匹配变量都能用来识别最新的匹配以及找出匹配的字符串。在需要动态决定替换字符串的文本替换中可以使用匹配变量。

字符 | 含义
$$ | $ （JScript 5.5 或更新版本）
$& | 指定与整个模式匹配的 stringObj 的部分。（JScript 5.5 或更新版本）
$` | 指定由 $& 描述的匹配之前的 stringObj 部分。（JScript 5.5 或更新版本）
$' | 指定由 $& 描述的匹配之后的 stringObj 部分。（JScript 5.5 或更新版本）
$n | 捕获的第 n 个子匹配，此处 n 为从1到9的十进制一位数。（JScript 5.5 或更新版本）
$nn | 捕获的第 nn 个子匹配，此处 nn 为从01到99的十进制两位数。（JScript 5.5 或更新版本）

如果 replaceText 为函数，对于每一个匹配的子字符串，调用该函数时带有下面的 m+3 个参数，此处 m 是在 rgExp 中捕获的左括弧的个数。第一个参数是匹配的子字符串。接下来的 m 个参数是查找中捕获的全部结果。第 m+2 个参数是在 stringObj 中匹配出现的偏移量，而第 m+3 个参数为 stringObj。结果为将每一匹配的子字符串替换为函数调用的相应返回值的字符串值。

Replace 方法更新全局 RegExp 对象的属性。

示例

下面的示例演示了 replace 方法将第一次出现的单词 "The" 替换为单词 "A" 的用法。

function ReplaceDemo(){
   var r, re;                    // 声明变量。
   var ss = "The man hit the ball with the bat.\n";
   ss += "while the fielder caught the ball with the glove.";
   re = /The/g;             // 创建正则表达式模式。
   r = ss.replace(re, "A");    // 用 "A" 替换 "The"。
   return(r);                   // 返回替换后的字符串。
}

另外, replace 方法也可以替换模式中的子表达式。下面的范例演示了交换字符串中的每一对单词：

function ReplaceDemo(){
   var r, re;                      // 声明变量。
   var ss = "The rain in Spain falls mainly in the plain.";
   re = /(\S+)(\s+)(\S+)/g;        // 创建正则表达式模式。
   r = ss.replace(re, "$3$2$1");   // 交换每一对单词。
   return(r);                      // 返回结果字符串。
}

下面的示例（在 JScript 5.5 及更新版本中执行）执行的是从华氏到摄氏的转换，它演示了使用函数作为 replaceText。要想知道该函数是如何工作的，传递一个包含数值的字符串，数值后要紧跟 "F" （例如 "Water boils at 212"）。

function f2c(s) {
  var test = /(\d+(\.\d*)?)F\b/g;    // 初始化模式。
  return(s.replace
    (test,
      function($0,$1,$2) {
        return((($1-32) * 5/9) + "C");
      }
    )
  );
}
document.write(f2c("Water freezes at 32F and boils at 212F."));

要求

版本 1

请参阅

exec 方法 | match 方法 | RegExp 对象 | search 方法 | String 对象的方法 | test 方法

应用于： String 对象


reverse 方法

返回一个元素顺序被反转的 Array 对象。

arrayObj.reverse( )

必选项 arrayObj 参数为 Array 对象。

说明

reverse 方法将一个 Array 对象中的元素位置进行反转。在执行过程中，这个方法并不会创建一个新的 Array 对象。

如果数组是不连续的，reverse 方法将在数组中创建元素以便填充数组中的间隔。这样所创建的全部元素的值都是 undefined。

示例

下面这个例子说明了 reverse 方法的用法：

function ReverseDemo(){
   var a, l;                  // 声明变量。
   a = new Array(0,1,2,3,4);  // 创建数组并赋值。
   l = a.reverse();           // 反转数组的内容。
   return(l);                 // 返回结果数组。
}

要求

版本 2

请参阅

Array 对象的方法

应用于： Array 对象


round 方法

返回与给出的数值表达式最接近的整数。

Math.round(number)

必选项 number 参数是要舍入到最接近整数的值。

说明

如果 number 的小数部分大于等于 0.5，返回值是大于 number 的最小整数。否则，round 返回小于等于 number 的最大整数。

要求

版本 1

请参阅

Math 对象方法

应用于： Math 对象


search 方法

返回与正则表达式查找内容匹配的第一个子字符串的位置。

stringObj.search(rgExp)

参数

stringObj
必选项。要在其上进行查找的 String 对象或字符串文字。
rgExp
必选项。包含正则表达式模式和可用标志的正则表达式对象。

说明

search 方法指明是否存在相应的匹配。如果找到一个匹配，search 方法将返回一个整数值，指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配，则返回 -1。

示例

下面的示例演示了 search 方法的用法。

function SearchDemo(){
   var r, re;                   // 声明变量。
   var s = "The rain in Spain falls mainly in the plain.";
   re = /falls/i;            // 创建正则表达式模式。
   r = s.search(re);            // 查找字符串。
   return(r);                   // 返回 Boolean 结果。
}

要求

版本 3

请参阅

exec 方法 | match 方法 | 正则表达式对象 | 正则表达式语法 | replace 方法 | String 对象的方法 | test 方法

应用于：String 对象


setDate 方法

设置 Date 对象中用本地时间表示的数字日期。

dateObj.setDate(numDate)

参数

dateObj
必选项。任意 Date 对象。
numDate
必选项。是一个等于数字日期的数值。

说明

要设置用全球标准时间 (UTC) 表示的日期值，请使用 setUTCDate 方法。

如果 numDate 的值大于 Date 对象中所保存的月份的天数或者是负数。那么日期将被设置为由 numDate 减去所保存月份中天数而得到的日期。例如，如果所保存的日期是 1996 年 1 月 5 日，并且调用了方法 setUTCDate(32)，那么日期将被改变为 1996 年 2 月 1 日。负数的处理方法与此相似。

示例

下面这个例子说明了 setDate 方法的用法。

function SetDateDemo(newdate){
   var d, s;                  // 声明变量。
   d = new Date();            // 创建 date 对象。
   d.setDate(newdate);        // 设置 date 为 newdate。
   s = "Current setting is ";
   s += d.toLocaleString();
   return(s);                 // 返回新设的日期。
}

要求

版本 3

请参阅

Date 对象的方法 | getDate 方法 | getUTCDate 方法 | setUTCDate 方法

应用于：Date 对象


setFullYear 方法

设置 Date 对象中用本地时间表示的年份值。

dateObj.setFullYear(numYear[, numMonth[, numDate]])

参数

dateObj
必选项。任意 Date 对象。
numYear
必选项。一个等于年份的数值。
numMonth
可选项。一个等于月份的数值。如果提供了 numDate，那么此项也必须提供。
numDate
可选项。一个等于日期的数值。

说明

如果没有指定可选项，那么所有使用可选项的 set 方法都将使用从相应的 get 方法返回的数值作为可选项的数值。例如，如果 numMonth 参数是可选的，但是没有被指定，JScript 将使用从 getMonth 方法返回的值作为该参数的值。

此外，如果参数的的值超出其范围或者是负数，其他被保存的值都将相应地得到修改。

要设置用全球标准时间 (UTC) 表示的年份，请使用 setUTCFullYear 方法。

Date 对象中所支持的年份的范围大约是 1970 年的前后各 285,616 年。

示例

下面这个例子说明了 setFullYear 方法的用法。

function SetFullYearDemo(newyear){
   var d, s;                 // 声明变量。
   d = new Date();           // 创建 Date 对象。
   d.setFullYear(newyear);   // 设置年份。
   s = "Current setting is ";
   s += d.toLocaleString();
   return(s);                // 返回新的日期设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getFullYear 方法 | getUTCFullYear 方法 | setUTCFullYear 方法

应用于：Date 对象


setHours 方法

设置 Date 对象中用本地时间表示的小时值。

dateObj.setHours(numHours[, numMin[, numSec[, numMilli]]])

参数

dateObj
必选项。任意 Date 对象。
numHours
必选项。一个等于小时值的数值。
numMin
可选项。一个等于分钟值的数值。如果使用了下面的参数，那么此参数也必须提供。
numSec
可选项。一个等于秒钟值的数值。如果使用了下面的参数，那么此参数也必须提供。
numMilli
可选项。一个等于毫秒值的数值。

说明

如果没有指定可选项，那么所有使用可选项的 set 方法都将使用从相应的 get 方法返回的数值作为可选项的数值。例如，如果 numMinutes 参数是可选的，但是没有被指定，JScript 将使用从 getMinutes 方法返回的值作为该参数的值。

要设置用全球标准时间 (UTC) 表示的小时值，请使用 setUTCHours 方法。

此外，如果参数的的值超出其范围或者是负数，其他被保存的值都将相应地得到修改。例如，如果所保存的日期是 "Jan 5, 1996 00:00:00"，且调用了 setHours(30) 方法，那么日期将被改变为 "Jan 6, 1996 06:00:00." 负数的处理方法与此相似。

示例

下面这个例子说明了 setHours 方法的用法。

function SetHoursDemo(nhr, nmin, nsec){
   var d, s;                     // 声明变量。
   d = new Date();               // 创建 Date 对象。
   d.setHours(nhr, nmin, nsec);  // 设置小时，分钟，秒。
   s = "Current setting is " + d.toLocaleString()
   return(s);                    // 返回新的日期设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getHours 方法 | getUTCHours 方法 | setUTCHours 方法

应用于：Date 对象


setMilliseconds 方法

设置 Date 对象中用本地时间表示的毫秒值。

dateObj.setMilliseconds(numMilli)

参数

dateObj
必选项。任意 Date 对象。
numMilli
必选项。是一个等于毫秒值的数值。

说明

要设置用全球标准时间 (UTC) 表示的毫秒值，请使用 setUTCMilliseconds 方法。

如果 numMilli 的值大于 999 或者是负数，所保存的秒钟数 (以及分钟，小时，等等，如果需要的话) 将增加适当的数量。

示例

下面这个例子说明了 setMilliseconds 方法的用法：

function SetMSecDemo(nmsec){
   var d, s;                    // 声明变量。
   var sep = ":";               // 初始化分隔符。
   d = new Date();              // 创建 Date 对象。
   d.setMilliseconds(nmsec);    // 设置毫秒数。
   s = "Current setting is ";
   s += d.toLocaleString() + sep + d.getMilliseconds();
   return(s);                   // 返回新的日期设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getMilliseconds 方法 | getUTCMilliseconds 方法 | setUTCMilliseconds 方法

应用于：Date 对象


setMinutes 方法

设置 Date 对象中用本地时间表示的分钟值。

dateObj.setMinutes(numMinutes[, numSeconds[, numMilli]])

参数

dateObj
必选项。任意 Date 对象。
numMinutes
必选项。一个等于分钟值的数值。
numSeconds
可选项。一个等于秒钟值的数值。如果使用了 numMilli 参数，那么必须提供此参数。
numMilli
可选项。一个等于毫秒值的数值。

说明

如果没有指定可选项，那么所有使用可选项的 set 方法都将使用从相应的 get 方法返回的数值作为可选项的数值。例如，如果 numSeconds 参数是可选的，但是没有被指定，JScript 将使用从 getSeconds 方法返回的值作为该参数的值。

要设置用全球标准时间 (UTC) 表示的分钟值，请使用 setUTCMinutes 方法。

如果参数的的值超出其范围或者是负数，其他被保存的值都将相应地得到修改。例如，如果所保存的日期是 "Jan 5, 1996 00:00:00"，且调用了 setMinutes(90) 方法，那么日期将被改变为 "Jan 5, 1996 01:30:00" 负数的处理方法与此相似。

示例

下面这个例子说明了 setMinutes 方法的用法。

function SetMinutesDemo(nmin, nsec){
   var d, s;                     // 声明变量。
   d = new Date();               // 创建 Date 对象。
   d.setMinutes(nmin, nsec);     // 设置分钟。
   s = "Current setting is " + d.toLocaleString()
   return(s);                    // 返回新的设置。
}

要求

版本 1

请参阅

Date 对象的方法 | getMinutes 方法 | getUTCMinutes 方法 | setUTCMinutes 方法

应用于：Date 对象


setMonth 方法

设置 Date 对象中用本地时间表示的月份值。

dateObj.setMonth(numMonth[, dateVal])

参数

dateObj
必选项。任意 Date 对象。
numMonth
必选项。一个等于月份值的数值。
dateVal
可选项。一个代表日期的数值。如果没有提供此参数，那么将使用通过调用 getDate 方法而得到的数值。

说明

要设置用全球标准时间 (UTC) 表示的月份值，请使用 setUTCMonth 方法。

如果 numMonth 的值大于 11 (月份 0 表示一月)或者是一个负数，那么所保存的年份将相应地得到改变。例如，如果所保存的日期是 "Jan 5, 1996" 并且调用了 setMonth(14) 方法，那么该日期就被改变为 "Mar 5, 1997."

示例

下面这个例子说明了 setMonth 方法的用法。

function SetMonthDemo(newmonth){
   var d, s;               // 声明变量。
   d = new Date();         // 创建 Date 对象
   d.setMonth(newmonth);   // 设置月份。
   s = "Current setting is ";
   s += d.toLocaleString();
   return(s);              //返回新的设置。
}

要求

版本 1

请参阅

Date 对象的方法 | getMonth 方法 | getUTCMonth 方法 | setUTCMonth 方法

应用于：Date 对象


setSeconds 方法

设置 Date 对象中用本地时间表示的秒钟值。

dateObj.setSeconds(numSeconds[, numMilli])

参数

dateObj
必选项。任意 Date 对象。
numSeconds
必选项。等于秒钟值的数值。
numMilli
可选项。等于毫秒值的数值。

说明

如果没有指定可选项，那么所有使用可选项的 set 方法都将使用从相应的 get 方法返回的数值作为可选项的数值。例如，如果 numMilli 参数是可选的，但是没有被指定，JScript 将使用从 getMilliseconds 方法返回的值作为该参数的值。

要设置用全球标准时间 (UTC) 表示的秒钟值，请使用 setUTCSeconds 方法。

如果一个参数的值超出了其取值范围或者是一个负数，其他保存的值将相应地得到修改。例如如果所保存的日期是 "Jan 5, 1996 00:00:00" 而且调用了函数 setSeconds(150)，日期将被改变为 "Jan 5, 1996 00:02:30."

示例

下面这个例子说明了 setSeconds 方法的用法：

function SetSecondsDemo(nsec, nmsec){
   var d, s;                   // 声明变量。
   var sep = ":";
   d = new Date();             // 创建 Date 对象。
   d.setSeconds(nsec, nmsec);  // 设置秒和毫秒。
   s = "Current setting is ";
   s += d.toLocaleString() + sep + d.getMilliseconds();
   return(s);                  // 返回新的设置。
}

要求

版本 1

请参阅

Date 对象的方法 | getSeconds 方法 | getUTCSeconds 方法 | setUTCSeconds 方法

应用于：Date 对象


setTime 方法

设置 Date 对象的日期和时间值。

dateObj.setTime(milliseconds)

参数

dateObj
必选项。任意 Date 对象。
milliseconds
必选项。是一个整数值，它代表从格林威治标准时间（GMT）的 1970 年 1 月 1 日午夜开始所经过的毫秒数。

说明

如果 milliseconds 是一个负值，那它就表示 1970 年之前的日期。可用的日期范围大约是 1970 年 1 月 1 日午夜的前后各 285,616 年。

使用 setTime 方法来设置日期和时间与时区无关。

示例

下面这个例子说明了 setTime 方法的用法。

function SetTimeTest(newtime){
   var d, s;                  // 声明变量。
   d = new Date();            // 创建 Date 对象。
   d.setTime(newtime);        // 设置时间。
   s = "Current setting is ";
   s += d.toUTCString();
   return(s);                 // 返回新的设置。
}

要求

版本 1

请参阅

Date 对象的方法 | getTime 方法

应用于：Date 对象


setUTCDate 方法

设置 Date 对象中用全球标准时间 (UTC) 表示的数值日期。

dateObj.setUTCDate(numDate)

参数

dateObj
必选项。任意 Date 对象。
numDate
必选项。是一个与数值日期相等的数值。

说明

要设置用本地时间表示的日期，请使用 setDate 方法。

如果 numDate 的值超出 Date 对象中所保存的月份中的天数或者该值是负数。那么日期将被设置为由 numDate 减去所保存月份中天数而得到的日期。例如，如果所保存的日期是 1996 年 1 月 5 日，并且调用了方法 setUTCDate(32)，那么日期将被改变为 1996 年 2 月 1 日。负数的处理方法与此相似。

示例

下面这个例子说明了 setUTCDate 方法的用法。

function SetUTCDateDemo(newdate){
   var d, s;                   // 声明变量。
   d = new Date();             // 创建 Date 对象。
   d.setUTCDate(newdate);      // 设置 UTC 日期。
   s = "Current setting is ";
   s += d.toUTCString();
   return(s);                  // 返回新的设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getDate 方法 | getUTCDate 方法 | setDate 方法

应用于：Date 对象


setUTCFullYear 方法

设置 Date 对象中用全球标准时间 (UTC) 表示的年份值。

dateObj.setUTCFullYear(numYear[, numMonth[, numDate]])

参数

dateObj
必选项。任意 Date 对象。
numYear
必选项。一个等于年份的数值。
numMonth
可选项。一个等于月份的数值。如果提供了 numDate，那么也必须提供此项。
numDate
可选项。一个等于日期的数值。

说明

如果没有指定可选项，那么所有使用可选项的 set 方法都将使用从相应的 get 方法返回的数值作为可选项的数值。例如，如果 numMonth 参数是可选的，但是没有被指定，JScript 将使用从 getUTCMonth 方法返回的值作为该参数的值。

此外，如果参数的的值超出其范围或者是负数，其他被保存的值都将相应地得到修改。

要设置用本地时间表示的年份，请使用 setFullYear 方法。

Date 对象中所支持的年份范围大约是 1970 年前后各 285,616 年。

示例

下面这个例子说明了 setUTCFullYear 方法的用法。

function SetUTCFullYearDemo(newyear){
   var d, s;                   // 声明变量。
   d = new Date();             // 创建 Date 对象。
   d.setUTCFullYear(newyear);  // 设置 UTC 完整年份。
   s = "Current setting is ";
   s += d.toUTCString();
   return(s);                  //返回新设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getFullYear 方法 | getUTCFullYear 方法 | setFullYear 方法

应用于：Date 对象


setUTCHours 方法

设置 Date 对象中用全球标准时间 (UTC) 表示的小时值。

dateObj.setUTCHours(numHours[, numMin[, numSec[, numMilli]]])

参数

dateObj
必选项。任意 Date 对象。
numHours
必选项。等于小时值的数值。
numMin
可选项。等于分钟值的数值，如果使用了 numSec 或numMilli，那么此参数也必须提供。
numSec
可选项。等于秒钟值的数值。如果使用了 numMilli 参数，那么此参数也必须提供。
numMilli
可选项。等于毫秒值的数值。

说明

如果没有指定可选项，那么所有使用可选项的 set 方法都将使用从相应的 get 方法返回的数值作为可选项的数值。例如，如果 numMin 参数是可选的，但是没有被指定，JScript 将使用从 getUTCMinutes 方法返回的值作为该参数的值。

要设置用本地时间表示的小时值，请使用 setHours 方法。

如果参数的的值超出其范围或者是负数，其他被保存的值都将相应地得到修改。例如，如果所保存的日期是 "Jan 5, 1996 00:00:00"，且调用了 setHours(30) 方法，那么日期将被改变为 "Jan 6, 1996 06:00:00."

示例

下面这个例子说明了 setUTCHours 方法的用法。

function SetUTCHoursDemo(nhr, nmin, nsec){
   var d, s;                        // 声明变量。
   d = new Date();                  // 创建 Date 对象。
   d.setUTCHours(nhr, nmin, nsec);  // 设置 UTC 小时，分钟，秒。
   s = "Current setting is " + d.toUTCString()
   return(s);                       // 返回新设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getHours 方法 | getUTCHours 方法 | setHours 方法

应用于：Date 对象


setUTCMilliseconds 方法

设置 Date 对象中用全球标准时间 (UTC) 表示的毫秒值。

dateObj.setUTCMilliseconds(numMilli)

参数

dateObj
必选项。任意 Date 对象。
numMilli
必选项。是一个等于毫秒值的数值。

说明

要设置用本地时间表示的毫秒值，请使用 setMilliseconds 方法。

如果 numMilli 的值大于 999 或者是负数，那么秒钟数（以及分钟、小时等等，如果需要的话）将增加一个适当的数量。

示例

下面这个例子说明了 setUTCMilliseconds 方法的用法：

function SetUTCMSecDemo(nmsec){
   var d, s;                           // 声明变量。
   var sep = ":";                      // 初始化分隔符。
   d = new Date();                     // 创建 Date 对象。
   d.setUTCMilliseconds(nmsec);        // 设置 UTC 毫秒。
   s = "Current setting is ";
   s += d.toUTCString() + sep + d.getUTCMilliseconds();
   return(s);                          // 返回新设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getMilliseconds 方法 | getUTCMilliseconds 方法 | setMilliseconds 方法

应用于：Date 对象


setUTCMinutes 方法

设置 Date 对象中用全球标准时间 (UTC) 表示的分钟值。

dateObj.setUTCMinutes(numMinutes[, numSeconds[, numMilli]])

参数

dateObj
必选项。任意 Date 对象。
numMinutes
必选项。等于分钟值的数值。
numSeconds
可选项。等于秒钟值的数值。如果使用了 numMilli 参数，那么此参数也必须提供。
numMilli
可选项。等于毫秒值的数值。

说明

如果没有指定可选项，那么所有使用可选项的 set 方法都将使用从相应的 get 方法返回的数值作为可选项的数值。例如，如果 numSeconds 参数是可选的，但是没有被指定，JScript 将使用从 getUTCSeconds 方法返回的值作为该参数的值。

要将分钟值修改为用本地时间表示的形式，请使用 setMinutes 方法。

如果参数的的值超出其范围或者是负数，其他被保存的值都将相应地得到修改。例如，如果所保存的日期是 "Jan 5, 1996 00:00:00"，且调用了setUTCMinutes(70)方法，那么日期将被改变为 "Jan 5, 1996 01:10:00.00."

示例

下面这个例子说明了 setUTCMinutes 方法的用法。

function SetUTCMinutesDemo(nmin, nsec){
   var d, s;                    // 声明变量。
   d = new Date();              // 创建 Date 对象。
   d.setUTCMinutes(nmin,nsec);  // 设置 UTC 分钟。
   s = "Current setting is " + d.toUTCString()
   return(s);                   // 返回新设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getMinutes 方法 | getUTCMinutes 方法 | setMinutes 方法

应用于：Date 对象


setUTCMonth 方法

设置 Date 对象中用全球标准时间 (UTC) 表示的月份值。

dateObj.setUTCMonth(numMonth[, dateVal])

参数

dateObj
必选项。任意 Date 对象。
numMonth
必选项。一个等于月份的数值。
dateVal
可选项。代表日期的数值。如果没有提供此参数，那么将使用通过调用 getUTCDate 方法而得到的数值。

说明

要设置用本地时间表示的月份值，请使用 setMonth 方法。

如果 numMonth 的值大于 11(月份 0 代表一月)或者是负数，那么所保存的年份也将相应地得到增加或减少。例如，如果所保存的日期是 "Jan 5, 1996 00:00:00.00"，而且调用了 setUTCMonth(14) 方法，那么日期将被改变为 "Mar 5, 1997 00:00:00.00."

示例

下面这个例子说明了 setUTCMonth 方法的用法。

function SetUTCMonthDemo(newmonth){
   var d, s;                       // 声明变量。
   d = new Date();                 // 创建 Date 对象。
   d.setUTCMonth(newmonth);        // 设置 UTC 月份。
   s = "Current setting is ";
   s += d.toUTCString();
   return(s);                      // 返回新设置。
}

要求

版本 3

请参阅

Date 对象方法 | getMonth 方法 | getUTCMonth 方法 | setMonth 方法

应用于：Date 对象


setUTCSeconds 方法

设置 Date 对象中用全球标准时间 (UTC) 表示的秒值。

dateObj.setUTCSeconds(numSeconds[, numMilli])

参数

dateObj
必选项。任意 Date 对象。
numSeconds
必选项。等于秒值的数值。
numMilli
可选项。等于毫秒值的数值。

说明

如果没有指定可选项，那么所有使用可选项的 set 方法都将使用从相应的 get 方法返回的数值作为可选项的数值。例如，如果 numMilli 参数是可选的，但是没有被指定，JScript 将使用从 getUTCMilliseconds 方法返回的值作为该参数的值。

要设置用本地时间表示的秒钟值，请使用 setSeconds 方法。

如果参数的的值超出其范围或者是负数，其他被保存的值都将相应地得到修改。例如，如果所保存的日期是 "Jan 5, 1996 00:00:00"，且调用了 setSeconds(150) 方法，那么日期将被改变为 "Jan 5, 1996 00:02:30.00."

示例

下面这个例子说明了 setSeconds 方法的用法。

function SetUTCSecondsDemo(nsec, nmsec){
   var d, s;                       // 声明变量。
   d = new Date();                 // 创建 Date 对象。
   d.setUTCSeconds(nsec, nmsec);   // 设置 UTC 秒和毫秒。
   s = "Current UTC milliseconds setting is ";
   s += d.getUTCMilliseconds();    // 获取新设置。
   return(s);                      // 返回新设置。
}

要求

版本 3

请参阅

Date 对象的方法 | getSeconds 方法 | getUTCSeconds 方法 | setSeconds 方法

应用于：Date 对象


setYear 方法

设置 Date 对象中的年份值。

dateObj.setYear(numYear)

参数

dateObj
必选项。任意 Date 对象。
numYear
必选项。其数值等于年份减去 1900。

说明

这个方法已经过时，之所以仍然保留，只是为了保持向后兼容性。请改用 setFullYear 方法。

要将 Date 对象的年份设置为 1997，请调用 setYear(97)。而要将年份设置为 2010，请调用 setYear(2010)。最后，要将年份设置为 0-99 范围内的一年，请使用 setFullYear 方法。

注意 对于 JScript 1.0 版， setYear 设置的值始终为 numYear 参数的值加上 1900。例如，要将年份设置为 1899，numYear 参数的值是 -1，而要将年份设置为 2000，numYear 参数的值是 100。

要求

版本 1

请参阅

Date 对象的方法 | getFullYear 方法 | getUTCFullYear 方法 | getYear 方法 | setFullYear 方法 | setUTCFullYear 方法

应用于：Date 对象


shift 方法

移除数组中的第一个元素并返回该元素。

arrayObj.shift( )

必选的 arrayObj 引用是一个 Array 对象。

说明

shift 方法可移除数组中的第一个元素并返回该元素。

要求

版本 5.5

请参阅

unshift 方法

应用于：Array 对象


sin 方法

返回数字的正弦值。

Math.sin(number)

number 参数是需要计算正弦的数值表达式。

说明

返回值为数字参数的正弦值。

要求

版本 1

请参阅

acos 方法 | asin 方法 | atan 方法 | cos 方法 | Math 对象方法 | tan 方法

应用于：Math 对象


slice 方法 (Array)

返回一个数组的一段。

arrayObj.slice(start, [end])

参数

arrayObj
必选项。一个 Array 对象。
start
必选项。arrayObj 中所指定的部分的开始元素是从零开始计算的下标。
end
可选项。arrayObj 中所指定的部分的结束元素是从零开始计算的下标。

说明

slice 方法返回一个 Array 对象，其中包含了 arrayObj 的指定部分。

slice 方法一直复制到 end 所指定的元素，但是不包括该元素。如果 start 为负，将它作为 length + start处理，此处 length 为数组的长度。如果 end 为负，就将它作为 length + end 处理，此处 length 为数组的长度。如果省略 end ，那么 slice 方法将一直复制到 arrayObj 的结尾。如果 end 出现在 start 之前，不复制任何元素到新数组中。

示例

在下面这个例子中，除了最后一个元素之外，myArray 中所有的元素都被复制到 newArray 中：

newArray = myArray.slice(0, -1)

要求

版本 3

请参阅

slice 方法 (String) | String 对象

应用于：Array 对象


slice 方法 (String)

返回字符串的片段。

stringObj.slice(start, [end])

参数

stringObj
必选项。是一个 String 对象或文字。
start
必选项。下标以 0 开始的 stringObj 指定部分起始索引。
end
可选项。下标以 0 起始的 stringObj 的指定部分结束索引。

说明

slice 方法返回一个包含 stringObj 的指定部分的 String 对象。

slice 方法一直复制到 end 所指定的元素，但是不包括该元素。如果 start 为负，将它作为 length + start处理，此处 length 为数组的长度。如果 end 为负，就将它作为 length + end 处理，此处 length 为数组的长度。如果省略 end ，那么 slice 方法将一直复制到 arrayObj 的结尾。如果 end 出现在 start 之前，不复制任何元素到新数组中。

示例

在下面的示例中，slice 方法的两种用法将返回相同的结果。第二个示例中的 -1 指向 str1 中的最后一个字符，并作为提取操作的结束位置。

str1.slice(0)
str2.slice(0,-1)

要求

版本 3

请参阅

Array 对象 | slice 方法 (Array) | String 对象的方法

应用于：String 对象


small 方法

将 HTML 的<SMALL> 标识添加到String 对象中的文本两端。

strVariable.small( )
"String Literal".small( )

说明

下面的示例演示了 small 方法是如何使用的：

var strVariable = "This is a string";
strVariable = strVariable.small( );

在上一条语句之后 strVariable 的值为：

<SMALL>This is a string</SMALL>

不检查该标识是否已应用于该字符串了。

要求

版本 1

请参阅

big 方法 | String 对象的方法 | String 对象的属性

应用于：String 对象


sort 方法

返回一个元素已经进行了排序的 Array 对象。

arrayobj.sort(sortfunction)

参数

arrayObj
必选项。任意 Array 对象。
sortFunction
可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略，那么元素将按照 ASCII 字符顺序进行升序排列。

说明

sort 方法将 Array 对象进行适当的排序；在执行过程中并不会创建新的 Array 对象。

如果为 sortfunction 参数提供了一个函数，那么该函数必须返回下列值之一：

  • 负值，如果所传递的第一个参数比第二个参数小。
  • 零，如果两个参数相等。
  • 正值，如果第一个参数比第二个参数大。

示例

下面这个例子说明了 sort 方法的用法：

function SortDemo(){
   var a, l;                       // 声明变量。
   a = new Array("X" ,"y" ,"d", "Z", "v","m","r");
   l = a.sort();                   // 排序数组。
   return(l);                      // 返回排序的数组。
}

要求

版本 2

请参阅

Array 对象的方法

应用于：Array 对象


splice 方法

从一个数组中移除一个或多个元素，如果必要，在所移除元素的位置上插入新元素，返回所移除的元素。

arrayObj.splice(start, deleteCount, [item1[, item2[, . . . [,itemN]]]])

参数

arrayObj
必选项。一个 Array 对象。
start
必选项。指定从数组中移除元素的开始位置，这个位置是从 0 开始计算的。
deleteCount
必选项。要移除的元素的个数。
item1, item2,. . .,itemN
必选项。要在所移除元素的位置上插入的新元素。

说明

splice 方法可以移除从 start 位置开始的指定个数的元素并插入新元素，从而修改 arrayObj。返回值是一个由所移除的元素组成的新 Array 对象。

要求

版本 5.5

请参阅

slice 方法 (Array)

应用于：Array 对象


split 方法

将一个字符串分割为子字符串，然后将结果作为字符串数组返回。

stringObj.split([separator[, limit]])

参数

stringObj
必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator
可选项。字符串或正则表达式对象，它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项，返回包含整个字符串的单一元素数组。
limit
可选项。该值用来限制返回数组中的元素个数。

说明

split 方法的结果是一个字符串数组，在 stingObj 中每个出现 separator 的位置都要进行分解。separator 不作为任何数组元素的部分返回。

示例

下面的示例演示了 split 方法的用法。

function SplitDemo(){
   var s, ss;
   var s = "The rain in Spain falls mainly in the plain.";
   // 在每个空格字符处进行分解。
   ss = s.split(" ");
   return(ss);
}

要求

版本 3

请参阅

concat 方法 | RegExp 对象 | 正则表达式对象 | 正则表达式语法 | String 对象的方法

应用于：String 对象


sqrt 方法

返回数字的平方根。

Math.sqrt(number)

必选项 number 参数是数值表达式。

说明

如果 number 为负数，则返回值为零。

要求

版本 1

请参阅

Math 对象方法 | SQRT1_2 属性 | SQRT2 属性

应用于：Math 对象


strike 方法

将 HTML 的<STRIKE> 标识放置到 String 对象中的文本两端。

strVariable.strike( )
"String Literal".strike( )

说明

下面的示例演示了strike 方法是如何使用的。

var strVariable = "This is a string object";
strVariable = strVariable.strike( );

在上一条语句之后 strVariable 的值为：

<STRIKE>This is a string object</STRIKE>

不检查该标识是否已应用于该字符串了。

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性

应用于：String 对象


sub 方法

将 HTML 的 <SUB> 标识放置到 String 对象中的文本两端。

strVariable.sub( )
"String Literal".sub( )

说明

下面的示例演示了 sub 方法是如何使用的：

var strVariable = "This is a string object";
strVariable = strVariable.sub( );

在执行上一条语句后 strVariable 的值为：

<SUB>This is a string object</SUB>

不检查该标识是否已应用于该字符串了。

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性 | sup 方法

应用于：String 对象


substr 方法

返回一个从指定位置开始的指定长度的子字符串。

stringvar.substr(start [, length ])

参数

stringvar
必选项。要提取子字符串的字符串文字或 String 对象。
start
必选项。所需的子字符串的起始位置。字符串中的第一个字符的索引为 0。
length
可选项。在返回的子字符串中应包括的字符个数。

说明

如果 length 为 0 或负数，将返回一个空字符串。如果没有指定该参数，则子字符串将延续到 stringvar 的最后。

示例

下面的示例演示了substr 方法的用法。

function SubstrDemo(){
   var s, ss;                // 声明变量。
   var s = "The rain in Spain falls mainly in the plain.";
   ss = s.substr(12, 5);  // 获取子字符串。
   return(ss);               // 返回 "Spain"。
}

要求

版本 3

请参阅

String 对象的方法 | String 对象的属性 | substring 方法

应用于：String 对象


substring 方法

返回位于 String 对象中指定位置的子字符串。

strVariable.substring(start, end)
"String Literal".substring(start, end)

参数

start
指明子字符串的起始位置，该索引从 0 开始起算。
end
指明子字符串的结束位置，该索引从 0 开始起算。

说明

substring 方法将返回一个包含从 start 到最后（不包含 end ）的子字符串的字符串。

substring 方法使用 start 和 end 两者中的较小值作为子字符串的起始点。例如， strvar.substring(0, 3) 和 strvar.substring(3, 0) 将返回相同的子字符串。

如果 start 或 end 为 NaN 或者负数，那么将其替换为0。

子字符串的长度等于 start 和 end 之差的绝对值。例如，在 strvar.substring(0, 3) 和 strvar.substring(3, 0) 返回的子字符串的的长度是 3。

示例

下面的示例演示了 substring 方法的用法。

function SubstringDemo(){
   var ss;                         // 声明变量。
   var s = "The rain in Spain falls mainly in the plain..";
   ss = s.substring(12, 17);   // 取子字符串。
   return(ss);                     // 返回子字符串。
}

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性 | substr 方法

应用于：String 对象


sup 方法

将 HTML 的 <SUP> 标识放置到 String 对象中的文本两端。

strVariable.sup( )
"String Literal".sup( )

说明

下面的示例演示了 sup 方法是如何使用的：

var strVariable = "This is a string object";
strVariable = strVariable.sup( );

在执行上一条语句后 strVariable 的值为：

<SUP>This is a string object</SUP>

不检查该标识是否已应用于该字符串了。

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性 | sub 方法

应用于：String 对象


tan 方法

返回数字的正切值。

Math.tan(number)

必选项 number 参数是要计算正切值的数值表达式。

说明

返回值为 number 的正切值。

要求

版本 1

请参阅

acos 方法 | asin 方法 | atan 方法 | atan2 方法 | cos 方法 | Math 对象方法 | sin 方法

应用于：Math 对象


test 方法

返回一个 Boolean 值，它指出在被查找的字符串中是否存在模式。

rgexp.test(str)

参数

rgexp
必选项。包含正则表达式模式或可用标志的正则表达式对象。
str
必选项。要在其上测试查找的字符串。

说明

test 方法检查在字符串中是否存在一个模式，如果存在则返回 true，否则就返回 false。

全局 RegExp 对象的属性不由 test 方法来修改。

示例

下面的例子举例说明了 test 方法的用法：

function TestDemo(re, s){
   var s1;                         // 声明变量。
   // 检查字符串是否存在正则表达式。
   if (re.test(s))                 // 测试是否存在。
      s1 = " contains ";           // s 包含模式。
   else
      s1 = " does not contain ";   // s 不包含模式。
   return("'" + s + "'" + s1 + "'"+ re.source + "'"); // 返回字符串。
}

要求

版本 3

请参阅

RegExp 对象 | 正则表达式对象 | 正则表达式对象的方法 | 正则表达式对象的属性 | 正则表达式的语法

应用于：正则表达式对象


toArray 方法

返回一个由 VBArray 转换而来的标准 JScript 数组。

safeArray.toArray( )

必选项 safeArray 参数是一个 VBArray 对象。

说明

该转换将多维的 VBArray 翻译成一个一维的 JScript 数组。每个后续维被添加到前一维的结尾。例如，一个三维的且每一维有三个元素的 VBArray 将被转换为如下所示的 JScript 数组：

假定该 VBArray 包含：(1, 2, 3), (4, 5, 6), (7, 8, 9)。在转换后，JScript 数组将包含：1, 2, 3, 4, 5, 6, 7, 8, 9。

现在没有将 JScript 数组转换为 VBArray 的方法。

示例

下面的示例包括三个部分。第一部分是用来创建一个 Visual Basic 安全数组的 VBScript 代码。第二部分是 JScript 代码，将这个 VB 安全数组转换为一个 JScript 数组。这两部分都放在 HTML 页中的 <HEAD> 部分。第三部分是位于 <BODY> 部分的 JScript 代码，用来运行其他两个部分。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         document.writeln(k)
         k = k + 1
      Next
      document.writeln("<BR>")
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vbarray)
{
   var a = new VBArray(vbarray);
   var b = a.toArray();
   var i;
   for (i = 0; i < 9; i++)
   {
      document.writeln(b[i]);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT LANGUAGE="JScript">
<!--
   VBArrayTest(CreateVBArray());
-->
</SCRIPT>
</BODY>

要求

版本 3

请参阅

dimensions 方法 | getItem 方法 | lbound 方法 | ubound 方法

应用于：VBArray 对象


toDateString 方法

以字符串值的形式返回一个日期。

objDate.toDateString( )

必选的 objDate 引用是一个 Date 对象。

说明

toDateString 方法返回一个包含日期的字符串，此日期是当前时区中，以一种方便而易于阅读的格式表示的值。

要求

版本 5.5

请参阅

toTimeString 方法 | toLocaleDateString 方法

应用于：Date 对象


toExponential 方法

返回一个字符串，其中包含一个以指数记数法表示的数字。

numObj.toExponential([fractionDigits])

参数

numObj
必选项。一个 Number 对象。
fractionDigits
可选项。小数点后数字位数。必须在 0 – 20 之间，包括 0 和 20。

说明

toExponential 方法返回一个字符串，该字符串代表一个以指数记数法表示的数字。该字符串中小数点之前有一位有效数字，并可能在小数点后有 fractionDigits 位数字。

如果没有 fractionDigits 参数，toExponential 方法将返回足够多位数字以便特别地指定该数字。

要求

版本 5.5

请参阅

toFixed 方法 | toPrecision 方法

应用于：Number 对象


toFixed 方法

返回一个字符串，代表一个以定点表示法表示的数字。

numObj.toFixed([fractionDigits])

参数

numObj
必选项。一个 Number 对象。
fractionDigits
可选项。小数点后的数字位数。其值必须在 0 – 20 之间，包括 0 和 20。

说明

toFixed 方法返回一个以定点表示法表示的数字的字符串形式。该字符串中小数点之前有一位有效数字，而且其后必须包含 fractionDigits 数字。

如果没有 fractionDigits 参数，或者该参数为 undefined，toFixed 方法假定该值为 0。

要求

版本 5.5

请参阅

toExponential 方法 | toPrecision 方法

应用于：Number 对象


toGMTString 方法

返回一个日期，该日期用格林威治标准时间 (GMT) 表示并已被转换为字符串。

dateObj.toGMTString()

所需的 dateObj 引用可以是任何 Date 对象。

说明

toGMTString 方法已经过时，之所以仍然提供这个方法，只是为了提供向后的兼容性。推荐改用 toUTCString 方法。

toGMTString 方法返回一个 String 对象，此对象中包含了按照 GMT 惯例进行格式化的日期。返回值的格式如下："05 Jan 1996 00:00:00 GMT"。

要求

版本 1

请参阅

Date 对象的方法 | toUTCString 方法

应用于：Date 对象


toLocaleDateString 方法

以字符串的形式返回与宿主环境的当前区域设置相对应的日期。

objDate.toLocaleDateString( )

必选的 objDate 引用是一个 Date 对象。

说明

toLocaleDateString 方法返回一个包含日期的字符串值，该日期是当前时区中，以一种方便而易于阅读的格式表示的值。该日期的格式为宿主环境的当前区域设置中的缺省格式。因为返回值可能随计算机的不同而不同，所以脚本编写过程中不能依赖此方法的返回值。toLocalDateString 方法应该仅仅用于格式化显示 – 而绝不要作为计算的一部分。

要求

版本 5.5

请参阅

toDateString 方法 | toLocaleTimeString 方法

应用于：Date 对象


toLocaleLowerCase 方法

返回一个字符串，其中所有的字母字符都被转换为小写，同时考虑到宿主环境的当前区域设置。

stringVar.tolocaleLowerCase( )

必选的 stringVar 引用是一个 String 对象，值或文字。

说明

toLocaleLowerCase 方法转换字符串中的字符，同时适应宿主环境的当前区域设置。在大多数情况下，其结果与利用 toLowerCase 方法所得到的结果是一样的。然而，如果语言规则与常规的 Unicode 大小写映射方式冲突，那么结果就会不同。

要求

版本 5.5

请参阅

toLocaleUpperCase 方法 | toLowerCase 方法

应用于：String 对象


toLocaleString 方法

返回一个日期，该日期使用当前区域设置并已被转换为字符串。

dateObj.toLocaleString()

必选项 dateObj 为任意的 Date 对象。

说明

toLocaleString 方法返回一个 String 对象，这个对象中包含了用当前区域设置的默认格式表示的日期。

  • 对于公元 1601 和 1999 之间的时间，日期格式要按照用户的“控制面板”中的“区域设置”来确定。
  • 对于此区间外的其他时间，使用 toString 方法的默认格式。

例如，同样是 1 月 5 日，在美国，toLocaleString 可能会返回 "01/05/96 00:00:00"，而在欧洲，返回值则可能是 "05/01/96 00:00:00"，因为欧洲的惯例是将日期放在月份前面。

注意 toLocaleString 只用来显示结果给用户；不要在脚本中用来做基本计算，因为返回的结果是随机器不同而不同的。

示例

下面这个例子说明了 toLocaleString 方法的用法。

function toLocaleStrDemo(){
   var d, s;                      // 声明变量。
   d = new Date();                // 创建 Date 对象。
   s = "Current setting is ";
   s += d.toLocaleString();       // 转换为当前区域。
   return(s);                     // 返回转换的日期。
}

要求

版本 1

请参阅

Date 对象的方法

应用于：Array 对象 | Date 对象 | Number 对象 | Object 对象


toLocaleTimeString 方法

以字符串的形式返回与宿主环境的当前区域设置相对应的时间。

objDate.toLocaleTimeString( )

必选的 objDate 引用是一个 Date 对象。

说明

toLocaleTimeString 方法返回一个包含时间的字符串值，该日期是当前时区中，以一种方便而易于阅读的格式表示的值。该时间的格式为宿主环境的当前区域设置中的缺省格式。因为返回值可能随计算机的不同而不同，所以脚本编写过程中不能依赖此方法的返回值。toLocalTimeString 方法应该仅仅用于格式化显示 – 而绝不要作为计算的一部分。

要求

版本 5.5

请参阅

ToTimeString 方法 | toLocaleDateString 方法

应用于：Date 对象


toLocaleUpperCase 方法

返回一个字符串，其中所有的字母字符都被转换为大写，同时适应宿主环境的当前区域设置。

stringVar.tolocaleUpperCase( )

必选的 stringVar 引用是一个 String 对象，值或文字。

说明

toLocaleUpperCase 方法转换字符串中的字符，同时适应宿主环境的当前区域设置。在大多数情况下，其结果与利用 toUpperCase 方法所得到的结果是一样的。然而，如果语言规则与常规的 Unicode 大小写映射方式冲突，那么结果就会不同。

要求

版本 5.5

请参阅

toLocaleLowerCase 方法 | toUpperCase 方法

应用于：String 对象


toLowerCase 方法

返回一个字符串，该字符串中的字母被转换为小写字母。

strVariable.toLowerCase( )
"String Literal".toLowerCase( )

说明

toLowerCase 方法对非字母字符不会产生影响。

下面的示例演示了 toLowerCase 方法的效果：

var strVariable = "This is a STRING object";
strVariable = strVariable.toLowerCase( );

在执行上一条语句后 strVariable 的值为：

this is a string object

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性 | toUpperCase 方法

应用于：String 对象


toPrecision 方法

返回一个字符串，其中包含一个以指数记数法或定点记数法表示的，具有指定数字位数的数字。

numObj.toPrecision ([precision])

参数

numObj
必选项。一个 Number 对象。
precision
可选项。有效数字的位数。必须在 1 – 21 之间，包括 1 和 21。

说明

对于以指数记数法表示的数字，将返回小数点后的 precision - 1 位数字。对于以定点记数法表示的数字，将返回 precision 位有效数字。

如果没有提供 precision 或者为 undefined，那么将改为调用 toString方法。

要求

版本 5.5

请参阅

toFixed 方法 | toExponential 方法

应用于：Number 对象


toString 方法

返回对象的字符串表示。

objectname.toString([radix])

参数

objectname
必选项。要得到字符串表示的对象。
radix
可选项。指定将数字值转换为字符串时的进制。

说明

toString 方法是所有内建的 JScript 对象的成员。它的操作依赖于对象的类型：

对象 | 操作
Array | 将 Array 的元素转换为字符串。结果字符串由逗号分隔，且连接起来。
Boolean | 如果 Boolean 值是 true，则返回 “true”。否则，返回 “false”。
Date | 返回日期的文字表示法。
Error | 返回一个包含相关错误信息的字符串。
Function 返回如下格式的字符串，其中 functionname 是被调用 toString 方法函数的名称：
function functionname( ) { [native code] }
Number | 返回数字的文字表示。
String | 返回 String 对象的值。
默认 | 返回 “[object objectname]”，其中 objectname 是对象类型的名称。

示例

下面的例子演示了使用带有 radix 参数的 toString 方法。上面所示函数的返回值是一个 Radix 转换表。

function CreateRadixTable (){
   var s, s1, s2, s3, x;                    // 声明变量。
   s = "Hex    Dec   Bin \n";               // 创建表头。
   for (x = 0; x < 16; x++)                 // 根据所示值的
   {                                        // 数字建立
      switch(x)                             // 表尺寸。
      {                                     // 设置栏目间空间。
         case 0 :
            s1 = "      ";
            s2 = "    ";
            s3 = "   ";
            break;
         case 1 :
            s1 = "      ";
            s2 = "    ";
            s3 = "   ";
            break;
         case 2 :
            s3 = "  ";
            break;
         case 3 :
            s3 = "  ";
            break;
         case 4 :
            s3 = " ";
            break;
         case 5 :
            s3 = " ";
            break;
         case 6 :
            s3 = " ";
            break;
         case 7 :
            s3 = " ";
            break;
         case 8 :
            s3 = "" ;
            break;
         case 9 :
            s3 = "";
            break;
         default:
            s1 = "     ";
            s2 = "";
            s3 = "    ";
      }                                     // 转换为十六进制、十进制、二进制。
      s += " " + x.toString(16) + s1 + x.toString(10)
      s +=  s2 + s3 + x.toString(2)+ "\n";

   }
   return(s);                               // 返回整个 radix 表。
}

要求

版本 2

请参阅

function 语句

应用于：Array 对象 | Boolean 对象 | Date 对象 | Error 对象 | Function 对象 | Number 对象 | Object 对象 | String 对象


toTimeString 方法

以字符串形式返回时间。

objDate.toTimeString( )

必选的 objDate 引用是一个 Date 对象。

说明

toTimeString 方法返回一个字符串值，该字符串包含以一种方便而易于阅读的格式表示的，当前时区的时间。

要求

版本 5.5

请参阅

toDateString 方法 | toLocaleTimeString 方法

应用于：Date 对象


toUpperCase 方法

返回一个字符串，该字符串中的所有字母都被转化为大写字母。

strVariable.toUpperCase( )
"String Literal".toUpperCase( )

说明

toUpperCase 方法对非字母字符不会产生影响。

示例

下面的示例演示了 toUpperCase 方法的效果：

var strVariable = "This is a STRING object";
strVariable = strVariable.toUpperCase( );

在执行上一条语句后 strVariable 的值为：

THIS IS A STRING OBJECT

要求

版本 1

请参阅

String 对象的方法 | String 对象的属性 | toLowerCase 方法

应用于：String 对象


toUTCString 方法

返回一个已被转换为字符串的，用全球标准时间 (UTC) 表示的日期。

dateObj.toUTCString()

必选项 dateObj 参数为任意 Date 对象。

说明

toUTCString 方法返回一个 String 对象，此对象中包含了使用 UTC 惯例以一种方便易读的形式进行格式化的日期。

示例

下面这个例子说明了 toUTCString 方法的用法。

function toUTCStrDemo(){
   var d, s;                   // 声明变量。
   d = new Date();             // 创建 Date 对象。
   s = "Current setting is ";
   s += d.toUTCString();       // 转换为 UTC 字符串。
   return(s);                  // 返回 UTC 字符串。
}

要求

版本 3

请参阅

Date 对象的方法 | toGMTString 方法

应用于： Date 对象


ubound 方法

返回在 VBArray 的指定维中所使用的最大索引值。

safeArray.ubound(dimension)

参数

safeArray
必选项。是一个 VBArray 对象。
dimension
可选项。要获知其索引上界的 VBArray 的维数。如果忽略，ubound 将该参数作为 1 进行处理。

说明

如果 VBArray 为空，ubound 方法将返回 undefined。如果 dim 大于 VBArray 的维数或为负数，该方法将产生一个“下标越界”的错误。

示例

下面的示例包括三个部分。第一部分是用来创建一个 Visual Basic 安全数组的 VBScript 代码。第二部分是 JScript 代码，确定该安全数组的维数和每一维的上界。这两部分都放在 HTML 页中的 <HEAD> 部分。第三部分是位于 <BODY> 部分的 JScript 代码，用来运行其他两个部分。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         k = k + 1
      Next
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vba)
{
   var i, s;
   var a = new VBArray(vba);
   for (i = 1; i <= a.dimensions(); i++)
   {
      s = "The upper bound of dimension ";
      s += i + " is ";
      s += a.ubound(i)+ ".<BR>";
      return(s);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT language="jscript">
   document.write(VBArrayTest(CreateVBArray()));
</SCRIPT>
</BODY>

要求

版本 3

请参阅

dimensions 方法 | getItem 方法 | lbound 方法 | toArray 方法

应用于：VBArray 对象


unescape 方法

解码用 escape 方法进行了编码的 String 对象。

unescape(charstring)

必选项 charstring 参数是要解码的 String 对象。

说明

unescape 方法返回一个包含 charstring 内容的字符串值。所有以 %xx 十六进制形式编码的字符都用 ASCII 字符集中等价的字符代替。

以 %u xxxx 格式（Unicode 字符）编码的字符用十六进制编码 xxxx 的 Unicode 字符代替.

注意 unescape 方法不能用于解码统一资源标识码 (URI)。解该码可使用 decodeURI 和 decodeURIComponent 方法。

要求

版本 1

请参阅

DecodeURI 方法 | decodeURIComponent 方法 | escape 方法 | String 对象

应用于：Global 对象


unshift 方法

将指定的元素插入数组开始位置并返回该数组。

arrayObj.unshift([item1[, item2 [, . . . [, itemN]]]])

参数

arrayObj
必选项。一个 Array 对象。
item1, item2,. . .,itemN
可选项。将插入到该 Array 开始部分的元素。

说明

unshift 方法将这些元素插入到一个数组的开始部分，所以这些元素将以参数序列中的次序出现在数组中。

要求

版本 5.5

请参阅

shift 方法

应用于：Array 对象


UTC 方法

返回全球标准时间 (UTC) (或 GMT) 的 1970 年 1 月 1 日到所指定日期之间所间隔的毫秒数。

Date.UTC(year, month, day[, hours[, minutes[, seconds[,ms]]]])

参数

year
必选项。为了获得跨世纪日期处理的精确性，需要使用完整的年份表示法。如果 year 处于 0 到 99 之间，那么 year 就被假定为 1900 + year。
month
必选项。月份是一个处于 0 到 11 之间的整数 (一月到十二月)。
day
必选项。日期是一个处于 1 到 31 之间的整数。
hours
可选项。如果提供了 minutes，那么此项也必须提供。0 到 23 之间的一个整数 (午夜到 11pm)，用来指定小时。
minutes
可选的，如果提供了 seconds，那么此项也必须提供。0 到 59 之间的一个整数，用来指定分钟值。
seconds
可选项。如果提供了 milliseconds，那么此项也必须提供。从 0 到 59 之间的一个整数，用来指定秒钟值。
ms
可选项。从 0 到 999 之间的一个整数，用来指定毫秒数。

说明

UTC 方法返回从 UTC 的 1970 年 1 月 1 日午夜到所指定日期之间的毫秒数。这个返回值可以用在 setTime 方法中和 Date 对象的构造函数中。如果一个参数的值超出其范围或者是一个负数，那么其他保存过的值将相应地得到改变。例如，如果使用者指定 150 秒，JScript 会将该数值重新定义为 2 分钟 30 秒。

UTC 方法和 Date 对象的接受日期值的构造函数之间的差别在于： UTC 方法假设 UTC，而 Date 对象的构造函数假定本地时间。

UTC 方法是一个静态方法。因此，Date 对象不一定要在创建完之后才可以使用。

注意 如果 year 处于 0 到 99 之间，年份为 1900 + year 。

示例

下面这个例子说明了 UTC 方法的用法：

function DaysBetweenDateAndNow(yr, mo, dy){
   var d, r, t1, t2, t3;            // 声明变量。
   var MinMilli = 1000 * 60         // 初始化变量。
   var HrMilli = MinMilli * 60
   var DyMilli = HrMilli * 24
   t1 = Date.UTC(yr, mo - 1, dy)    // 从 1970 年 1 月 1 日起的毫秒。
   d = new Date();                  // 创建日期对象。
   t2 = d.getTime();                // 获得当前时间。
   if (t2 >= t1)
      t3 = t2 - t1;
   else
      t3 = t1 - t2;
   r = Math.round(t3 / DyMilli);
   return(r);                       //返回差值。
}

要求

版本 1

请参阅

Date 对象的方法 | setTime 方法

应用于：Date 对象


valueOf 方法

返回指定对象的原始值。

object.valueOf( )

必选项 object 参数是任意固有 JScript 对象。

说明

每个 JScript 内部对象的 valueOf 方法定义不同。

对象 | 返回值
Array | 数组的元素被转换为字符串，这些字符串由逗号分隔，连接在一起。其操作与 Array.toString 和 Array.join 方法相同。
Boolean | Boolean 值。
Date | 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC。
Function | 函数本身。
Number | 数字值。
Object | 对象本身。这是默认情况。
String | 字符串值。

Math 和 Error 对象没有 valueOf 方法。

要求

版本 2

请参阅

toString 方法

应用于：Array 对象 | Boolean 对象 | Date 对象 | Function 对象 | Number 对象 | Object 对象 | String 对象


JScript 对象

下表列出了 JScript 对象：

描述 | 语言元素
启用并返回一个 Automation 对象的引用。 | ActiveXobject 对象
提供对创建任何数据类型的数组的支持。 | Array 对象
创建一个新的 Boolean 值。 | Boolean 对象
提供日期和时间的基本存储和检索。 | Date 对象
存储数据键、项目对的对象。 | Dictionary 对象
提供集合中的项的枚举。 | Enumerator 对象
包含在运行 JScript 代码时发生错误的有关信息。 | Error 对象
提供对计算机文件系统的访问。 | FileSystemobject 对象
创建一个新的函数。 | Function 对象
是一个内部对象，目的是将全局方法集中在一个对象中。 | Global 对象
一个内部对象，提供基本的数学函数和常数。 | Math 对象
表示数值数据类型和提供数值常数的对象。 | Number 对象
提供所有 JScript 对象的公共功能。 | object 对象
存储有关正则表达式模式查找的信息。 | RegExp 对象
包含一个正则表达式模式。 | 正则表达式对象
对文本字符串进行操作和格式处理，判定在字符串中是否存在某个子字符串及确定其位置。 | String 对象
提供对 Visual Basic 安全数组的访问。 | VBArray 对象


ActiveXObject 对象

启用并返回 Automation 对象的引用。

newObj = new ActiveXObject(servername.typename[, location])

参数

newObj
必选项。要赋值为 ActiveXObject 的变量名。
servername
必选项。提供该对象的应用程序的名称。
typename
必选项。要创建的对象的类型或类。
location
可选项。创建该对象的网络服务器的名称。

说明

Automation 服务器至少提供一类对象。例如，字处理应用程序可能提供应用程序对象、文档对象和工具栏对象。

要创建 Automation 对象，将新的 ActiveXObject 赋给对象变量：

var ExcelSheet;
ExcelApp = new ActiveXObject("Excel.Application");
ExcelSheet = new ActiveXObject("Excel.Sheet");

本代码启动创建对象的应用程序（在这种情况下，Microsoft Excel 工作表）。一旦对象被创建，就可以用定义的对象变量在代码中引用它。在下面的例子中，通过对象变量 ExcelSheet 访问新对象的属性和方法和其他 Excel 对象，包括 Application 对象和 ActiveSheet.Cells 集合。

// 使 Excel 通过 Application 对象可见。
ExcelSheet.Application.Visible = true;
// 将一些文本放置到表格的第一格中。
ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1";
// 保存表格。
ExcelSheet.SaveAs("C:\\TEST.XLS");
// 用 Application 对象用 Quit 方法关闭 Excel。
ExcelSheet.Application.Quit();

只有当 Internet 安全性关闭时才能完成在远程服务器中创建对象。要在远程网络计算机创建对象，可以将该计算机的名称传递给 ActiveXObject 的 servername 参数。该名称与共享名的机器名部分相同。比如共享名为 "\\myserver\public" 的网络，servername 是 "myserver"。另外，可以用 DNS 格式或 IP 地址指定 servername。

下面的代码返回在名为 "myserver" 的远程网络计算机上运行的 Excel 实例的版本号：

function GetAppVersion() {
   var XLApp = new ActiveXObject("Excel.Application", "MyServer");
   return(XLApp.Version);
}

如果指定的远程服务器不存在或找不到时将发生错误。

要求

版本 1

请参阅

GetObject 函数


Array 对象

提供对创建任何数据类型的数组的支持。

arrayObj = new Array()
arrayObj = new Array([size])
arrayObj = new Array([element0[, element1[, ...[, elementN]]]])

参数

arrayObj
必选项。要赋值为 Array 对象的变量名。
size
可选项。可选项数组的大小。由于数组的下标是从零开始，创建的元素的下标将从零到 size -1。
element0,...,elementN
可选项。要放到数组中的元素。这将创建具有 n + 1 个元素的长度为 n + 1 的数组。使用该语法时必须有一个以上元素。

说明

创建数组后，能够用 [ ] 符号访问数组单个元素，例如：

var my_array = new Array();
for (i = 0; i < 10; i++)
   {
   my_array[i] = i;
   }
x = my_array[4];

由于 Microsoft JScript 中的数组的下标是从零开始的，前面例子中最后一条语句访问数组的第五个元素。该元素中保存的值是 4。

如果只向 Array 的构造函数传递了一个参数，而该参数是数字，则它必须是无符号 32 位整数（大约 40 亿）。该值成为数组的大小。如果该值为数值，但小于 0 或不为整数，发生运行时错误。

如果传递给 Array 构造函数的是单个值并且不是数值，设置 length 属性为 1，而且唯一的元素值成为单个的传入的参数。

请注意 JScript 数组为解析数组，也就是尽管可以分配多个元素给一个数组，但实际上只有包含数据的元素才存在。这减少了数组使用的内存数量。

属性

constructor 属性 | length 属性 | prototype 属性

方法

concat 方法 | join 方法 | pop 方法 | push 方法 | reverse 方法 | shift 方法 | slice 方法 | sort 方法 | splice 方法 | toLocaleString 方法 | toString 方法 | unshift 方法 | valueOf 方法

要求

版本 2

请参阅

new 运算符


arguments 对象

该对象代表正在执行的函数和调用它的函数的参数。

[function.]arguments[n]

参数

function
可选项。当前正在执行的 Function 对象的名字。
n
必选项。要传递给 Function 对象的从0开始的参数值索引。

说明

不能显式创建 arguments 对象。arguments 对象只有函数开始时才可用。函数的 arguments 对象并不是一个数组，访问单个参数的方式与访问数组元素的方式相同。索引 n 实际上是 arguments 对象的 0…n 属性的其中一个参数。

示例

下面的示例演示了 arguments 对象的用法。

function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";
   var numargs = arguments.length;     // 获取被传递参数的数值。
   var expargs = ArgTest.length;       // 获取期望参数的数值。
   if (expargs < 2)
      s += expargs + " argument. ";
   else
      s += expargs + " arguments. ";
   if (numargs < 2)
      s += numargs + " was passed.";
   else
      s += numargs + " were passed.";
   s += "\n\n"
   for (i =0 ; i < numargs; i++){      // 获取参数内容。
   s += "  Arg " + i + " = " + arguments[i] + "\n";
   }
   return(s);                          // 返回参数列表。
}

要求

版本 1

请参阅

0…n 属性 | callee 属性 | length 属性


Boolean 对象

创建新的 Boolean 值。

语法

boolObj = new Boolean([boolValue])

参数

boolObj
必选项。要赋值为 Boolean 对象的变量名。
boolValue
可选项。是新对象的初始 Boolean 值。如果忽略 Boolvalue ，或者其值为 false、0、null、 NaN，或者空字符串，则该 Boolean 对象的初始值为 false。否则，初始值为 true。

说明

Boolean 对象是 Boolean 数据类型的包装器。每当 Boolean 数据类型转换为 Boolean 对象时，JScript 都隐含地使用 Boolean 对象。

很少会显式地调用 Boolean 对象。

属性

constructor 属性 | prototype 属性

方法

toString 方法 | valueOf 方法

要求

版本 2

请参阅

new 运算符 | var 语句


Date 对象

启用基本存储器并取得日期和时间。

dateObj = new Date()
dateObj = new Date(dateVal)
dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]])

参数

dateObj
必选项。要赋值为 Date 对象的变量名。
dateVal
必选项。如果是数字值，dateVal 表示指定日期与 1970 年 1 月 1 日午夜间全球标准时间的毫秒数。如果是字符串，则 dateVal 按照 parse 方法中的规则进行解析。dateVal 参数也可以是从某些 ActiveX® 对象返回的 VT_DATE 值。
year
必选项。完整的年份，比如，1976（而不是 76）。
month
必选项。表示的月份，是从 0 到 11 之间的整数（ 1 月至 12 月）。
date
必选项。表示日期，是从 1 到 31 之间的整数。
hours
可选项。如果提供了 minutes 则必须给出。表示小时，是从 0 到 23 的整数（午夜到 11pm）。
minutes
可选项。如果提供了 seconds 则必须给出。表示分钟，是从 0 到 59 的整数。
seconds
可选项。如果提供了 milliseconds 则必须给出。表示秒钟，是从 0 到 59 的整数。
ms
可选项。表示毫秒，是从 0 到 999 的整数。

说明

Date 对象保存以毫秒为单位表示特定时间段。如果某个参数的值大于其范围或为负数，则存储的其他值将做相应的调整。例如，如果指定 150 秒，JScript 将该数字重新定义为 2 分 30 秒。

如果数字为 NaN，则该对象不代表特定的时间段。如果未向 Date 对象传递参数，它将被初始化为当前时间 (UTC)。在能够使用该对象前必须为其赋值。

Date 对象能够表示的日期范围约等于 1970 年 1 月 1 日前后各 285,616 年。

Date 对象具有两个不创建 Date 对象就可以调用的静态方法。它们是 parse 和 UTC。

错误

下面的示例演示了 Date 对象的用法。

function DateDemo(){
   var d, s = "Today's date is: ";           // 声明变量。
   d = new Date();                           // 创建 Date 对象。
   s += (d.getMonth() + 1) + "/";            // 获取月份。
   s += d.getDate() + "/";                   // 获取日。
   s += d.getYear();                         // 获取年份。
   return(s);                                // 返回日期。
}

属性

constructor 属性 | prototype 属性

方法

getDate 方法 | getDay 方法 | getFullYear 方法 | getHours 方法 | getMilliseconds 方法 | getMinutes 方法 | getMonth 方法 | getSeconds 方法 | getTime 方法 | getTimezoneOffset 方法 | getUTCDate 方法 | getUTCDay 方法 | getUTCFullYear 方法 | getUTCHours 方法 | getUTCMilliseconds 方法 | getUTCMinutes 方法 | getUTCMonth 方法 | getUTCSeconds 方法 | getVarDate 方法 | getYear 方法 | setDate 方法 | setFullYear 方法 | setHours 方法 | setMilliseconds 方法 | setMinutes 方法 | setMonth 方法 | setSeconds 方法 | setTime 方法 | setUTCDate 方法 | setUTCFullYear 方法 | setUTCHours 方法 | setUTCMilliseconds 方法 | setUTCMinutes 方法 | setUTCMonth 方法 | setUTCSeconds 方法 | setYear 方法 | toGMTString 方法 | toLocaleString 方法 | toUTCString 方法 | toString 方法 | valueOf 方法 | parse 方法 | UTC 方法

要求

版本 1

请参阅

new 运算符 | var 语句


Enumerator 对象

启用枚举集合中的项目。

enumObj = new Enumerator([collection])

参数

enumObj
必选项。要赋值为 Enumerator 对象的变量名。
collection
可选项。任意 Collection 对象。

说明

集合与数组的不同点在于集合的成员不能直接访问。不象处理数组时使用下标，这时只能将当前项目指针移动到集合的下一或前一元素。

Enumerator 对象提供了访问集合的任何成员的方法，其操作与 VBScript 中的 For...Each 语句相似。

示例

下面的代码显示了 Enumerator 对象的用法:

function ShowDriveList(){
   var fso, s, n, e, x;                     // 声明变量。
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);          // 在驱动器上创建 Enumerator。
   s = "";
   for (;!e.atEnd();e.moveNext())           // 枚举驱动器集合。
      {
         x = e.item();
         s = s + x.DriveLetter;
         s += " - ";
         if (x.DriveType == 3)              // 查看是否网络驱动。
            n = x.ShareName;                // 获取共享名。
         else if (x.IsReady)                // 查看驱动器是否已就绪。
            n = x.VolumeName;               // 获取卷名。
         else
            n = "[驱动器未就绪]";
         s +=  n + "<br>";
      }
   return(s);                               // 返回活动驱动器列表。
}

属性

Enumerator 对象没有属性。

方法

atEnd 方法 | item 方法 | moveFirst 方法 | moveNext 方法

要求

版本 3


Error 对象

保存有关错误的信息。

errorObj = new Error()
errorObj = new Error([number])
errorObj = new Error([number[, description]])

参数

errorObj
必需。指派给 Error 对象的变量名。
number
可选。指派给错误的数值。如果省略，则为零。
description
可选。描述错误的简短字符串。如果省略，则为空字符串。

说明

每当产生运行时错误，就产生 Error 对象的一个实例以描述错误。该实例有两个固有属性保存错误的描述（description 属性）和错误号（number 属性）。

错误号是 32 位的值。高 16 位字是设备代码，而低字是实际的错误代码。

Error 对象也可以用如上所示的语法显式创建，或用 throw 语句抛掉。在两种情况下，都可以添加选择的任何属性，以拓展 Error 对象的能力。

典型地，在 try...catch 语句中创建的局部变量引用隐式创建的 Error 对象。因此，可以按选择的任何方法使用错误号和描述。

示例

下面的例子演示了隐式创建 Error 对象的使用：

try
   x = y   // 产生错误。
catch(e){   // 创建局部变量 e。
   response.write(e)   // 打印 "[object Error]".
   response.write(e.number & 0xFFFF)   // 打印 5009。
   response.write(e.description)   // 打印 "'y' is undefined".
}

方法

Error 对象没有方法。

属性

description 属性 | number属性

要求

版本 5

请参阅

new 运算符 | throw 语句 | try...catch 语句 | var 语句


Function 对象

创建新的函数。

语法 1

function functionName([argname1 [, ...[, argnameN]]])
{
   body
}

语法 2

functionName = new Function( [argname1, [... argnameN,]] body );

参数

functionName
必选项。最新创建函数的名称
argname1...argnameN
可选项。函数接收的参数列表。
body
可选项。包含调用该函数时被执行的 JScript 代码块的字符串。

说明

函数 JScript 中的基本数据类型。语法 1 创建在必要时由 JScript 转换为 Function 对象的函数值。JScript 在调用函数时将用语法 2 创建的函数转换为 Fnction 对象。

语法 1 是 JScript 中创建函数的基本方法。语法 2 是用于显式创建函数对象的另一方法。

例如，要创建将传递给它的两个参数相加的函数，可以用两种方法中的任一种完成：

示例 1

function add(x, y)
{
   return(x + y);            // 执行加法并返回结果。
}

示例 2

var add = new Function("x", "y", "return(x+y)");

在两种情况下，都可以用如下代码行调用该函数：

add(2, 3);
注意 在调用函数时，请确保包含了括号和必需的参数。调用函数时不用括号导致返回函数的文本而不是函数执行的结果。

属性

arguments 属性 | caller 属性 | constructor 属性 | prototype 属性

方法

toString 方法 | valueOf 方法

要求

版本 2

请参阅

function 语句 | new 运算符 | var 语句


Global 对象

是一个内部对象，目的是把所有全局方法集中在一个对象中。

Global 对象没有语法。直接调用其方法。

说明

Global 对象从不直接使用，并且不能用 new 运算符创建。它在 Scripting 引擎被初始化时创建，并立即使其方法和属性可用。

属性

Infinity 属性 | NaN 属性

方法

escape 方法 | eval 方法 | isFinite 方法 | isNaN 方法 | parseFloat 方法 | parseInt 方法 | unescape 方法

要求

版本 5

请参阅

Object 对象


Math 对象

是一个内部对象，提供基本数学函数和常数。

Math.[{property | method}]

参数

property
必选项。Math 对象的一个属性名。
method
必选项。Math.对象的一个方法名。

说明

Math 对象不能用 new 运算符创建，如果试图这样做则给出错误。在装载脚本引擎时由该引擎创建该对象。其所有方法和属性在脚本中总是可用。

属性

E 属性 | LN2 属性 | LN10 属性 | LOG2E 属性 | LOG10E 属性 | PI 属性 | SQRT1_2 属性 | SQRT2 属性

方法

abs 方法 | acos 方法 | asin 方法 | atan 方法 | atan2 方法 | ceil 方法 | cos 方法 | exp 方法 | floor 方法 | log 方法 | max 方法 | min 方法 | pow 方法 | random 方法 | round 方法 | sin 方法 | sqrt 方法 | tan 方法

要求

版本 1

请参阅

Number 对象


Number 对象

代表数值数据类型和提供数值常数的对象。

numObj = new Number(value)

参数

numobj
必选项。要赋值为 Number 对象的变量名。
value
必选项。正在创建的 Number 对象的数值。

说明

JScript 根据数字值的要求创建 Number 对象。很少有必要显式创建 Number 对象。

Number 对象最主要的用途是将其属性集中到一个对象中，以及使数字能够通过 toString 方法转换为字符串。

属性

MAX_VALUE 属性 | MIN_VALUE 属性 | NaN 属性 | NEGATIVE_INFINITY 属性 | POSITIVE_INFINITY 属性 | constructor 属性 | prototype 属性

方法

toLocaleString 方法 | toString 方法 | valueOf 方法

要求

版本 1

请参阅

Math 对象 | new 运算符


Object 对象

提供所有 JScript 对象通用的功能。

obj = new Object([value])

参数

obj
必选项。要赋值为 Object 对象的变量名。
value
可选项。任意一种 JScript 基本数据类型。（Number、Boolean、或 String。）如果 value 为一个对象，返回不作改动的该对象。如果 value 为 null、undefined，或者没有给出，则产生没有内容的对象。

说明

Object 对象被包含在所有其它 JScript 对象中；在所有其它对象中它的方法和属性都是可用的。在用户定义的对象中可以重定义这些方法，并在适当的时候通过 JScript 调用。toString 方法是经常被重定义的 Object 方法的例子。

在本语言参考中，每个 Object 方法的说明包括默认的和与对象相关固有 JScript 对象的实现信息。

属性

prototype 属性 | constructor 属性

方法

toLocaleString 方法 | toString 方法 | valueOf 方法

要求

版本 3

请参阅

Function 对象 | Global 对象


RegExp 对象

保存有关正则表达式模式匹配信息的固有全局对象。

RegExp.property

必选项 property 参数是 RegExp 对象的任意一个属性。

说明

RegExp 对象不能直接创建，但始终可以使用。在成功的正则表达式查找完成之前，RegExp 对象各属性的初始值如下所示：

属性 | 简写 | 初始值
index |  | -1
lastIndex |  | -1
lastMatch | $& | 空字符串。
lastParen | $+ | 空字符串。
leftContext |  | 空字符串。
rightContext |  | 空字符串。
$1 - $9 | $1 - $9 | 空字符串。

在成功的正则表达式查找完成之前，其属性值为 undefined。

不要将全局 RegExp 对象与正则表达式对象混淆。尽管听起来像是一回事，但它们是截然不同的。全局 RegExp 对象的属性包含不断更新的关于每个匹配出现的信息，而正则表达式对象只包含出现正则表达式匹配的信息。

示例

下面的例子演示了全局 RegExp 对象的用法。

function matchDemo(){
   var s;
   var re = new RegExp("d(b+)(d)","ig");
   var str = "cdbBdbsbdbdz";
   var arr = re.exec(str);
   s = "$1 contains: " + RegExp.$1 + "\n";
   s += "$2 contains: " + RegExp.$2 + "\n";
   s += "$3 contains: " + RegExp.$3;
   return(s);
}

属性

$1...$9 属性 | index 属性 | input 属性 | lastIndex 属性 | lastMatch 属性 | lastParen 属性 | leftContext 属性 | rightContext 属性

方法

RegExp 对象没有方法。

要求

版本 3

请参阅

正则表达式对象 | 正则达式语法 | String 对象


正则表达式对象

本对象包含正则表达式模式以及表明如何应用模式的标志。

语法 1

re = /pattern/[flags]

语法 2

re = new RegExp("pattern",["flags"])

参数

re
必选项。将要赋值为正则表达式模式的变量名。
Pattern
必选项。要使用的正则表达式模式。如果使用语法 1，用 "/" 字符分隔模式。如果用语法 2，用引号将模式引起来。
flags
可选项。如果使用语法 2 要用引号将 flag 引起来。标志可以组合使用，可用的有：
  • g （全文查找出现的所有 pattern）
  • i （忽略大小写）
  • m （多行查找）

说明

不要将正则表达式对象跟全局 RegExp 对象混淆。尽管听起来像是一回事，但它们是截然不同的。正则表达式对象的属性只包含一个正则表达式的信息，而全局 RegExp 对象的属性包含了不断更新的每一个匹配出现的信息。

正则表达式对象保存用于查找字符串中的字符组合时的模式。创建正则表达式对象后，或者它被传递给字符串方法，或者字符串被传递给一个正则表达式方法。有关最近进行查找的信息被保存在全局 RegExp 对象中。

当预先知道查找字符串时用语法 1。当查找字符串经常变动或不知道时用语法 2，比如由用户输入得到的字符串。

在使用前 pattern 参数被编译为内部格式。对语法 1 来说，pattern 在该脚本被装载时被编译。对语法 2 来说，pattern 在使用前，或调用 compile 方法时被编译。

示例

下面的示例创建一个包含正则表达式模式及相关标志的对象(re)，向您演示正则表达式对象的用法。在本例中，作为结果的正则表达式对象又用于 match 方法中：

function MatchDemo(){
   var r, re;                     // 声明变量。
   var s = "The rain in Spain falls mainly in the plain";
   re = new RegExp("Spain","i");  // 创建正则表达式对象。
   r = s.match(re);               // 在字符串 s 中查找匹配。
   return(r);                     // 返回匹配结果。
}

属性

lastIndex 属性 | source 属性

方法

compile 方法 | exec 方法 | test 方法

要求

版本 3

请参阅

RegExp 对象 | 正则表达式语法 | String 对象


String 对象

可用于处理或格式化文本字符串以及确定和定位字符串中的子字符串。

语法

newString = new String(["stringLiteral"])

参数

newString
必选项。要赋值为 String 对象的变量名。
stringLiteral
可选项。任意 Unicode 字符群。

说明

String 对象可用字符串文字显式创建。用这种方法创建的 String 对象（指以标准字符串形式）与用 new 运算符创建的 String 对象处理上不同。所有字符串文字共享公用的全局字符串对象。如果为字符串文字添加属性，则它对所有标准字符串对象都是可用的：

var alpha, beta;
alpha = "这是一个字符串";
beta = "这也是一个字符串";

alpha.test = 10;

在前一示例中，这时为 beta 和所有将来的字符串定义 test。然而，在下面的例子中，被添加属性的处理略有不同：

var gamma, delta;
gamma = new String("这是一个字符串");
delta = new String("这是也一个字符串");

gamma.test = 10;

在这种情况下，不为 delta 定义 test。每个用 new String 声明的 String 对象有其自己的一组成员。这是对 String 对象和字符串文字的处理不同的唯一情况。

属性

constructor 属性 | length 属性 | prototype 属性

方法

anchor 方法 | big 方法 | blink 方法 | bold 方法 | charAt 方法 | charCodeAt 方法 | concat 方法 | fixed 方法 | fontcolor 方法 | fontsize 方法 | fromCharCode 方法 | indexOf 方法 | italics 方法 | lastIndexOf 方法 | link 方法 | match 方法 | replace 方法 | search 方法 | slice 方法 | small 方法 | split 方法 | strike 方法 | sub 方法 | substr 方法 | substring 方法 | sup 方法 | toLowerCase 方法 | toUpperCase 方法 | toString 方法 | valueOf 方法

要求

版本 1

请参阅

new 运算符


VBArray 对象

提供对 Visual Basic 安全数组的访问。

varName = new VBArray(safeArray)

参数

varName
必选项。要赋值为 VBArray 的变量名。
safeArray
必选项。VBArray 值。

说明

VBArrays 是只读的，并且不能被直接创建。在传递给 VBArray 构造函数之前 safeArray 参数必须已获得 VBArray 值。这只能通过从已有的 ActiveX 或其它对象获得值才能做到。

VBArrays 可以有多维。每一维的下标可以不一样。dimensions 方法取得数组的维数；lbound 和 ubound 方法取得每个维的下标范围。

示例

下面的例子由三部分组成。第一部分是创建 Visual Basic 安全数组的 VBScript 代码。第二部分是将 VB 安全数组转换为 JScript 数组的 JScript 代码。这两部分都放到 HTML 页的 <HEAD> 节中。第三部分是放在 <BODY> 节中以运行其它两部分的 JScript 代码。

<HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Function CreateVBArray()
   Dim i, j, k
   Dim a(2, 2)
   k = 1
   For i = 0 To 2
      For j = 0 To 2
         a(j, i) = k
         document.writeln(k)
         k = k + 1
      Next
      document.writeln("vbCRLF")
   Next
   CreateVBArray = a
End Function
-->
</SCRIPT>

<SCRIPT LANGUAGE="JScript">
<!--
function VBArrayTest(vbarray){
   var a = new VBArray(vbarray);
   var b = a.toArray();
   var i;
   for (i = 0; i < 9; i++)
   {
      document.writeln(b[i]);
   }
}
-->
</SCRIPT>
</HEAD>

<BODY>
<SCRIPT LANGUAGE="JScript">
<!--
   VBArrayTest(CreateVBArray());
-->
</SCRIPT>
</BODY>

属性

VBArray 对象没有属性。

方法

dimensions 方法 | getItem 方法 | lbound 方法 | toArray 方法 | ubound 方法

要求

版本 3

请参阅

Array 对象


JScript 运算符

下表列出了 JScript 运算符：

描述 | 语言元素
将两个数相加或连接两个字符串。 | 加法运算符 (+)
将一个值赋给变量。 | 赋值运算符 (=)
对两个表达式执行按位与操作。 | 按位与运算符 (&)
将一个表达式的各位向左移。 | 按位左移运算符 (<<)
对一个表达式执行按位取非（求非）操作。 | 按位非运算符 (~)
对两个表达式指定按位或操作。 | 按位或运算符 (|)
将一个表达式的各位向右移，保持符号不变。 | 按位右移运算符 (>>)
对两个表达式执行按位异或操作。 | 按位异或运算符 (^)
使两个表达式连续执行。 | 逗号运算符 (,)
返回 Boolean 值，表示比较结果。 | 比较运算符
复合赋值运算符列表。 | 复合赋值运算符
根据条件执行两个表达式之一。 | 条件（三元）运算符 (?:)
将变量减一。 | 递减法运算符 ( — )
删除对象的属性，或删除数组中的一个元素。 | delete 运算符
将两个数相除并返回一个数值结果。 | 除法运算符 (/)
比较两个表达式，看是否相等。 | 相等运算符 (==)
比较两个表达式，看一个是否大于另一个。 | 大于运算符 (>)
比较两个表达式，看一个是否大于等于另一个。 | 大于等于运算符 (>=)
比较两个表达式，看值是否相等并具有相同的数据类型。 | 严格相等运算符 (===)
给变量加一。 | 递增运算符 (++)
比较两个表达式，看是否不相等。 | 不等运算符 (!=)
返回一个 Boolean 值，表明某个对象是否为特定类的一个实例。 | instanceof 运算符
比较两个表达式，看是否一个小于另一个。 | 小于运算符 (<)
比较两个表达式，看是否一个小于等于另一个。 | 小于等于运算符 (<=)
对两个表达式执行逻辑与操作。 | 逻辑与运算符 (&&)
对表达式执行逻辑非操作。 | 逻辑非运算符 (!)
对两个表达式执行逻辑或操作。 | 逻辑或运算符 (||)
将两个数相除，并返回余数。 | 取余运算符 (%)
将两个数相乘。 | 乘法运算符 (*)
创建一个新对象。 | new 运算符
比较两个表达式，看是否具有不相等的值或数据类型不同。 | 不等运算符 (!==)
包含 JScript 运算符的执行优先级信息的列表。 | 运算符优先级
对两个表达式执行减法操作。 | 减法运算符 (-)
返回一个表示表达式的数据类型的字符串。 | typeof 运算符
表示一个数值表达式的相反数。 | 一元取反运算符 (-)
在表达式中对各位进行无符号右移。 | 无符号右移运算符 (>>>)
避免一个表达式返回值。 | void 运算符


加法赋值运算符 (+=)

将变量值与表达式值相加，并将和赋给该变量。

result += expression

参数

result
任何变量。
expression
任何表达式。

说明

使用本运算符与这样指定完全相同：

result = result + expression

表达式中加下划线的子类型决定 += 运算符的操作。

如果 | 那么
两个表达式都是数字或 Boolean 量 | 加
两个表达式都是字符串 | 连接
一个表达式是数字而另一个是字符串 | 连接

要求

版本 1

请参阅

+ 运算符 | 运算符优先级| 运算符总结


加法运算符 (+) (JScript)

JScript

加法运算符 (+)

将数字表达式的值加到另一数字表达式上，或连接两个字符串。

result = expression1 + expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

表达式中加下划线的子类型决定 + 运算符的操作。

如果 | 那么
两个表达式都是数字或 Boolean 量 | 加
两个表达式都是字符串 | 连接
一个表达式是数字而另一个是字符串 | 连接

要求

版本 1

请参阅

+= 运算符 | 运算符优先级 | 运算符总结


赋值运算符 (=) (JScript)

JScript

赋值运算符 (=)

给变量赋值。

result = expression

参数

result
任何变量。
expression
任何数值表达式。

说明

= 运算符和其他运算符一样，除了把值赋给变量外，使用它的表达式还有一个值。这就意味着可以象下面这样把赋值操作连起来写：

j = k = l = 0;

执行完该例子语句后，j、k、和 l 的值都等于零。

要求

版本 1

请参阅

运算符优先级 | 运算符总结


按位“与”赋值运算符 (&=)

对变量值与表达式值执行按位“与”，并将结果赋给该变量。

result &= expression

参数

result
任何变量。
expression
任何表达式。

说明

使用该运算符和使用下面的语句是等效的:

result = result & expression

&= 运算符查看 result 和 expression 的二进制表示法的值,并对其执行按位“与”操作。该操作的输出如下所示：

0101    (result)
1100    (expression)
----
0100    （输出）

任何时候，只要两个表达式在某一位上都是 1，则结果的该位也是 1。否则，结果的该位是 0。

要求

版本 1

请参阅

& 运算符 | 运算符优先级 | 运算符总结


按位“与”运算符 (&)

对两个表达式执行按位“与”。

result = expression1 & expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

& 运算符查看两个表达式的二进制表示法的值，并执行按位“与”操作。该操作的结果如下所示：

0101   (expression1)
1100   (expression2)
----
0100   (result)

任何时候，只要两个表达式的某位都为 1，则结果的该位为 1。否则，结果的该位为 0。

要求

版本 1

请参阅

&= 运算符 | 运算符优先级 | 运算符总结


按位左移运算符 (<<)

左移表达式的位。

result = expression1 << expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

<< 运算符把 expression1 的所有位向左移 expression2 指定的位数。例如：

var temp
temp = 14 << 2

变量 temp 的值为 56，因为 14 （即二进制的 00001110）向左移两位等于 56 （即二进制的 00111000）。

要求

版本 1

请参阅

<<= 运算符 | >> 运算符 | >>> 运算符 | 运算符优先级 | 运算符总结


按位“非”运算符 (~)

对一个表达式执行按位“非”（取反）。

result = ~ expression

参数

result
任何变量。
expression
任何表达式。

说明

所有一元运算符，如 ~ 运算符，以如下规则来求表达式的值：

  • 如果将它用于未定义或 null 表达式，则产生一个运行时错误。
  • 对象被转换成字符串。
  • 如果可能，字符串被转换为数字。如果不能，则产生一个运行时错误。
  • Boolean 值被当作数字（如果是 false 则为 0，如果是 true 则为 1）。

用该运算符来生成数字。

~ 运算符查看表达式的二进制表示法的值，并执行按位非操作。该操作的结果如下所示：

0101   (expression)
----
1010   (result)

表达式中的任何一位为 1，则在结果中相应位变为 0。表达式中的任何一位为 0，则在结果中相应位变为 1。

要求

版本 1

请参阅

! 运算符 | 运算符优先级 | 运算符总结


按位“或”赋值运算符 (|=)

对变量值与表达式值执行按位“或”，并将结果赋给该变量。

result |= expression

参数

result
任何变量。
expression
任何表达式。

说明

使用该运算符和使用下面的语句是等效的：

result = result | expression

|= 运算符查看 result 和 expression 的二进制表示法的值，并执行按位“或”操作。该操作的结果如下所示：

0101    (result)
1100    (expression)
----
1101    (输出)

任何时候，只要两个表达式中的其中一个的某位是 1，则结果的该位是 1。否则，结果的该位是 0。

要求

版本 1

请参阅

| 运算符 | 运算符优先级 | 运算符总结


按位“或”运算符 (|)

对两个表达式执行按位“或”

result = expression1 | expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

| 运算符查看两个表达式的二进制表示法的值，并执行按位“或”操作。该操作的结果如下所示：

0101   (expression1)
1100   (expression2)
----
1101   (result)

任何时候，只要任一表达式的一位为 1，则结果的该位为 1。否则，结果的该位为 0。

要求

版本 1

请参阅

|= 运算符 | 运算符优先级 | 运算符总结


按位右移运算符 (>>)

右移表达式的位，保持符号不变。

result = expression1 >> expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

>> 运算符把 expression1 的所有位向右移 expression2 指定的位数。expression1 的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃。例如，下面的代码被求值后，temp 的值是 -4：-14 （即二进制的 11110010）右移两位等于 -4 （即二进制的 11111100）。

var temp
temp = -14 >> 2

要求

版本 1

请参阅

<< 运算符 | >>= 运算符 | >>> 运算符 | 运算符优先级 | 运算符总结


按位“异或”赋值运算符 (^=)

对变量和表达式执行按位异或，并将结果赋给该变量。

result ^= expression

参数

result
任意变量。
expression
任意表达式。

说明

使用 ^= 运算符和使用下面的语句是等效的：

result = result ^ expression

^= 运算符查看两个表达式的二进制表示法的值，并执行按位异或。该操作的结果如下所示：

0101    (result)
1100    (expression)
----
1001    （结果）

当且仅当只有一个表达式的某位为 1 时，结果的该位才为 1。否则，结果的该位为 0。

要求

版本 1

请参阅

^ 运算符 | 运算符优先级 | 运算符总结


按位“异或”运算符 (^)

对两个表达式执行按位异或。

result = expression1 ^ expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

^ 运算符查看两个表达式的二进制表示法的值，并执行按位异或。该操作的结果如下所示：

0101   (expression1)
1100   (expression2)
----
1001   (result)

当且仅当只有一个表达式的某位上为 1 时，结果的该位才为 1。否则结果的该位为 0。

要求

版本 1

请参阅

^= 运算符 | 运算符优先级 | 运算符总结


逗号运算符 (,)

顺序执行两个表达式。

expression1, expression2

参数

expression1
任何表达式。
expression2
任何表达式。

说明

, 运算符使它两边的表达式以从左到右的顺序被执行，并获得右边表达式的值。, 运算符最普通的用途是在 for 循环的递增表达式中使用。例如：

for (i = 0; i < 10; i++, j++)
{
   k = i + j;
}

每次通过循环的末端时， for 语句只允许单个表达式被执行。, 运算符被用来允许多个表达式被当作单个表达式，从而规避该限制。

要求

版本 1

请参阅

for 语句 | 运算符优先级 | 运算符总结


比较运算符 (JScript)

JScript

比较运算符

返回表示比较结果的 Boolean 值。

expression1 comparisonoperator expression2

参数

expression1
任何表达式。
comparisonoperator
任何比较运算符。
expression2
任何表达式。

说明

比较字符串时，JScript 使用字符串表达式的 Unicode 字符值。

下面说明根据 expression1 和 expression2 的类型和值，不同组的运算符是如何作用的：

关系运算符（<、>、<=、>=）

  • 试图将 expression1 和 expression2 都转换为数字。
  • 如果两表达式均为字符串，则按字典序进行字符串比较。
  • 如果其中一个表达式为 NaN，返回 false。
  • 负零等于正零。
  • 负无穷小于包括其本身在内的任何数。
  • 正无穷大于包括其本身在内的任何数。

相等运算符 （==、!=）

  • 如果两表达式的类型不同，则试图将它们转换为字符串、数字或 Boolean 量。
  • NaN 与包括其本身在内的任何值都不相等。
  • 负零等于正零。
  • null 与 null 和 undefined 相等。
  • 相同的字符串、数值上相等的数字、相同的对象、相同的 Boolean 值或者（当类型不同时）能被强制转化为上述情况之一，均被认为是相等的。
  • 其他比较均被认为是不相等的。

恒等运算符 （===、!==）

除了不进行类型转换，并且类型必须相同以外，这些运算符与相等运算符的作用是一样的。

要求

版本 1

请参阅

运算符优先级 | 运算符总结


复合赋值运算符

下表列出了 JScript 赋值运算符：

运算符 | 符号
加法 | +=
按位与 | &=
按位或 | |=
按位异或 | ^=
除法 | /=
左移 | <<=
取余 | %=
乘法 | *=
右移 | >>=
减法 | -=
无符号右移 | >>>=

要求

版本信息


条件（三目）运算符 (?:)

根据条件执行两个语句中的其中一个。

test ? 语句1 : 语句2

参数

test
任何 Boolean 表达式。
语句1
当 test 是 true 时执行的语句。可以是复合语句。
语句2
当 test 是 false 时执行的语句。可以是复合语句。

说明

?: 运算符是 if...else 语句的快捷方式。它通常被用作较大表达式的一部分，而在此处使用 if...else 语句是不协调的。例如：

var now = new Date();
var greeting = "Good" + ((now.getHours() > 17) ? " evening." : " day.");

在该例子中，如果是 6pm 以后，则创建一个包含 "Good evening." 的字符串。使用 if...else 语句的等效代码如下：

var now = new Date();
var greeting = "Good";
if (now.getHours() > 17)
   greeting += " evening.";
else
   greeting += " day.";

要求

版本 1

请参阅

if...else 语句 | 运算符优先级 | 运算符总结


delete 运算符

从对象中删除一个属性，或从数组中删除一个元素。

delete expression

expression 参数是一个有效的 JScript 表达式，通常是一个属性名或数组元素。

说明

如果 expression 的结果是一个对象，且在 expression 中指定的属性存在，而该对象又不允许它被删除，则返回 false。

在所有其他情况下，返回 true。

要求

版本 3

请参阅

运算符优先级 | 运算符总结


除法赋值运算符 (/=)

变量值除以表达式值，并将结果赋给该变量。

result /= expression

参数

result
任何数值变量。
expression
任何数值表达式。

说明

使用 /= 运算符和使用下面的语句是等效的：

result = result / expression

要求

版本 1

请参阅

/ 运算符 | 运算符优先级 | 运算符总结


除法运算符 (/) (JScript)

JScript

除法运算符 (/)

将两个表达式的值相除。

result = number1 / number2

参数

result
任何数值变量。
number1
任何数值表达式。
number2
任何数值表达式。

要求

版本 1

请参阅

/= 运算符 | 运算符优先级 | 运算符总结


in 运算符

测试对象中是否存在该属性。

result = property in object

参数

result
必选项。任意变量。
property
必选项。相当于字符串表达式的一个表达式。
object
必选项。任意对象。

说明

in 操作检查对象中是否有名为 property 的属性。也可以检查对象的原型，以便知道该属性是否为原型链的一部分。

要求

版本 1

请参阅

运算符优先级 | 运算符总结


递增 (++) 和递减 (--) 运算符

JScript

递增 (++) 和递减 (—) 运算符

变量值递增一或递减一。

语法 1

result = ++variable
result = --variable
result = variable++
result = variable--

语法 2

++variable
--variable
variable++
variable--

参数

result
任何变量。
variable
任何变量。

说明

递增和递减法运算符，是修改存在变量中的值的快捷方式。包含其中一个这种运算符的表达式的值，依赖于该运算符是在变量前面还是在变量后面：

var j, k;
k = 2;
j = ++k;

因为递增发生在表达式被求值前，所以值 3 赋给了 j。

和下面的例子对照：

var j, k;
k = 2;
j = k++;

在此，因为递增发生在表达式被求值后，所以值 2 赋给了 j。

要求

版本 1

请参阅

运算符优先级 | 运算符总结


instanceof 运算符

返回一个 Boolean 值，指出对象是否是特定类的一个实例。

result = object instanceof class

参数

result
必选项。任意变量。
object
必选项。任意对象表达式。
class
必选项。任意已定义的对象类。

说明

如果 object 是 class 的一个实例，则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例，或者 object 是 null，则返回 false。

示例

下面的例子举例说明了 instanceof 运算符的用法。

function objTest(obj){
   var i, t, s = "";   // 创建变量。
   t = new Array();   // 创建数组。
   t["Date"] = Date;   // 植入数组。
   t["Object"] = Object;
   t["Array"] = Array;
      for (i in t)
      {
         if (obj instanceof t[i])   // 检查 obj 的类。
         {
            s += "obj is an instance of " + i + "\n";
         }
         else
         {
            s += "obj is not an instance of " + i + "\n";
         }
   }
   return(s);   // 返回字符串。
}

var obj = new Date();
response.write(objTest(obj));

要求

版本 5

请参阅

运算符优先级 | 运算符总结


左移赋值运算符 (<<=)

变量值根据表达式值所规定的位数进行左移，并将结果赋给该变量

result <<= expression

参数

result
任何变量。
expression
任何表达式。

说明

使用 <<= 运算符与使用下面的语句是等效的：

result = result << expression

<<= 运算符把 result 的所有位向左移动 expression 所指定的位数。例如：

var temp
temp = 14
temp <<= 2

变量 temp 的值是 56，因为 14 （即二进制的 00001110）左移两位等于 56 （即二进制的 00111000）。在移动时用零来填充右边空出的位。

要求

版本 1

请参阅

<< 运算符 | >> 运算符 | >>> 运算符 | 运算符优先级 | 运算符总结


逻辑“与”运算符 (&&)

两个表达式执行逻辑联合。

result = expression1 && expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

当且仅当两个表达式的值都等于 True 时， result 才是 True。如果任一表达式的值等于 False， 则 result 为 False。

JScript 使用下面的规则，来把非 Boolean 值转换为 Boolean 值：

  • 所有对象都被认为是 true。
  • 字符串当且仅当为空时被认为是 false。
  • null 和未定义的均被认为是 false。
  • 数字当且仅当为零时是 false。

要求

版本 1

请参阅

运算符优先级 | 运算符总结


逻辑“非”运算符 (!)

对一个表达式执行逻辑非。

result = !expression

参数

result
任何变量。
expression
任何表达式。

说明

下面的表举例说明了 result 是如何决定的。

如果 expression 是 | 则 result 是
True | False
False | True

所有一元运算符，如 ! 运算符，按照下面的规则来求表达式的值：

  • 如果应用于未定义的或 null 表达式，则会产生一个运行时错误。
  • 对象被转换为字符串。
  • 如果可能，字符串被转换为数值。否则会产生一个运行时错误。
  • Boolean 值被当作数值（如果是 false 则为 0，如果是 true 则为 1）。

该运算符被用来产生数值。

对于 ! 运算符，如果 expression 是非零的，则 result 是零。如果 expression 是零，则 result 是 1。

要求

版本 1

请参阅

~ 运算符 | 运算符优先级 | 运算符总结


逻辑“或”运算符 (||)

对两个表达式执行逻辑“或”。

result = expression1 || expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

如果两个表达式中有一个或两个等于 True，则 result 是 True。下面的表举例说明了 result 是如何被决定的：

如果 expression1 是 | 且 expression2 是 | 则 result 是
True | True | True
True | False | True
False | True | True
False | False | False

JScript 使用下面的规则来把非 Boolean 值转换为 Boolean 值：

  • 所有对象都被认为是 true。
  • 字符串当且仅当为空时才被认为是 false。
  • null 和未定义的均被认为是 false。
  • 数字当且仅当为 0 时才是 false。

要求

版本 1

请参阅

运算符优先级 | 运算符总结


取余赋值运算符 (%=)

变量值除以表达式值，并将余数赋给变量。

result %= expression

参数

result
任何变量。
expression
任何数值表达式。

说明

使用 %= 运算符与使用下面的语句是等效的：

result = result % expression

要求

版本 1

请参阅

% 运算符 | 运算符优先级 | 运算符总结


取余运算符 (%)

一个表达式的值除以另一个表达式的值，返回余数。

result = number1 % number2

参数

result
任何变量。
number1
任何数值表达式。
number2
任何数值表达式。

说明

取余（或余数）运算符用 number1 除以 number2 （把浮点数四舍五入为整数），然后只返回余数作为 result。例如，在下面的表达式中，A （即 result）等于 5。

A = 19 % 6.7

要求

版本 1

请参阅

%= 运算符 | 运算符优先级 | 运算符总结


乘法赋值运算符 (*=)

变量值乘以表达式值，并将结果赋给该变量。

result *= expression

参数

result
任何变量。
expression
任何表达式。

说明

使用 *= 运算符和使用下面的语句是等效的：

result = result * expression

要求

版本 1

请参阅

* 运算符 | 运算符优先级 | 运算符总结


乘法运算符 (*) (JScript)

JScript

乘法运算符 (*)

两个表达式的值相乘。

result = number1*number2

参数

result
任何变量。
number1
任何表达式。
number2
任何表达式。

要求

版本 1

请参阅

*= 运算符 | 运算符优先级 | 运算符总结


new 运算符

创建一个新对象。

new constructor[(arguments)]

参数

constructor
必选项。对象的构造函数。如果构造函数没有参数，则可以省略圆括号。
arguments
可选项。任意传递给新对象构造函数的参数。

说明

new 运算符执行下面的任务：

  • 创建一个没有成员的对象。
  • 为那个对象调用构造函数，传递一个指针给新创建的对象作为 this 指针。
  • 然后构造函数根据传递给它的参数初始化该对象。

下面这些是有效的 new 运算符的用法例子。

my_object = new Object;
my_array = new Array();
my_date = new Date("Jan 5 1996");

要求

版本 1

请参阅

function 语句


右移赋值运算符 (>>=)

变量值右移表达式值所规定的位数，保持符号不变，并将结果赋给该变量。

result >>= expression

参数

result
任何变量。
expression
任何表达式。

说明

使用 >>= 运算符和使用下面的语句是等效的：

result = result >> expression

>>= 运算符把 result 的所有位向右移 expression 指定的位数。result 的符号位被用来填充右移后左边空出的位。从右边移出去的位被丢弃。例如，下面的代码被求值后，temp 的值是 -4：-14 （即二进制的 11110010）右移两位等于 -4 （即二进制的 11111100）。

var temp
temp = -14
temp >>= 2

要求

版本 1

请参阅

<< 运算符 | >> 运算符 | >>> 运算符 | 运算符优先级 | 运算符总结


减法赋值运算符 (-=)

从变量值中减去表达式值，并将结果赋给该变量。

result -= expression

参数

result
任何数值变量。
expression
任何数值表达式。

说明

使用 -= 运算符与使用下面的语句是等效的：

result = result - expression

要求

版本 1

请参阅

- 运算符 | 运算符优先级 | 运算符总结


减法运算符 (-) (JScript)

JScript

减法运算符 (-)

从一个表达式的值中减去另一个表达式的值，只有一个表达式时取其相反数。

语法 1

result = number1 - number2

语法 2

-number

参数

result
任何数值变量。
number
任何数值表达式。
number1
任何数值表达式。
number2
任何数值表达式。

说明

在语法 1 中，- 运算符是算术减法运算符，用来获得两个数值之间的差。在语法 2 中，- 运算符被用作一元取负运算符，用来指出一个表达式的负值。

对于语法 2，和所有一元运算符一样，表达式按照下面的规则来求值：

  • 如果应用于未定义或 null 表达式，则会产生一个运行时错误。
  • 对象被转换为字符串。
  • 如果可能，则字符串被转换为数值。如果不能，则会产生一个运行时错误。
  • Boolean 值被当作数值（如果是 false 则为 0，如果是 true 则为 1）。

该运算符被用来产生数值。在语法 2 中，如果生成的数值不是零，则 result 与生成的数值颠倒符号后是相等的。如果生成的数值是零，则 result 是零。

要求

版本 1

请参阅

-= 运算符 | 运算符优先级 | 运算符总结


typeof 运算符

返回一个用来表示表达式的数据类型的字符串。

typeof[()expression[]] ;

expression 参数是需要查找类型信息的任意表达式。

说明

typeof 运算符把类型信息当作字符串返回。typeof 返回值有六种可能："number"、"string"、"boolean"、"object"、"function" 和 "undefined"。

typeof 语法中的圆括号是可选项。

要求

版本 1

请参阅

运算符优先级 | 运算符总结


无符号右移运算符 (>>>)

右移表达式的位，不保留符号。

result = expression1 >>> expression2

参数

result
任何变量。
expression1
任何表达式。
expression2
任何表达式。

说明

>>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。例如：

var temp
temp = -14 >>> 2

变量 temp 的值为 -14 （即二进制的 11111111 11111111 11111111 11110010），向右移两位后等于 1073741820 （即二进制的 00111111 11111111 11111111 11111100）。

要求

版本 1

请参阅

>>>= 运算符 | << 运算符 | >> 运算符 | 运算符优先级 | 运算符总结


无符号右移赋值运算符 (>>>=)

JScript

无符号右移赋值操作 (>>>=)

对变量值根据表达式值所规定的位数进行无符号右移，并将结果赋给该变量。

result >>>= expression

参数

result
任何变量。
expression
任何表达式。

说明

使用 >>>= 运算符和使用下面的语句是等效的：

result = result >>> expression

>>>= 运算符把 result 的所有位向右移 expression 指定的位数。右移后左边空出的位用零来填充。向右移出的位被丢弃。例如：

var temp
temp = -14
temp >>>= 2

变量 temp 的值为 -14 （即二进制的 11111111 11111111 11111111 11110010），向右移两位后等于 1073741820 （即二进制的 00111111 11111111 11111111 11111100）。

要求

版本 1

请参阅

>>> 运算符 | << 运算符 | >> 运算符 | 运算符优先级 | 运算符总结


void 运算符

避免表达式返回值。

void expression

expression 参数是任意有效的 JScript 表达式。

说明

void 运算符对表达式求值，并返回 undefined。在希望求表达式的值，但又不希望脚本的剩余部分看见这个结果时，该运算符最有用。

要求

版本 2

请参阅

运算符优先级 | 运算符总结


JScript 属性

下表列出了 JScript 属性：

描述 | 语言元素
返回在模式匹配中找到的最近的九条记录。 | $1...$9 属性
返回一个包含传递给当前执行函数的每个参数的数组。 | arguments 属性
返回调用当前函数的函数引用。 | caller 属性
指定创建对象的函数。 | constructor 属性
返回或设置关于指定错误的描述字符串。 | description 属性
返回 欧拉常数，即自然对数的底。 | E 属性
返回在字符串中找到的第一个成功匹配的字符位置。 | index 属性
返回 Number.POSITIVE_INFINITY 的初始值。 | Infinity 属性
返回进行查找的字符串。 | input 属性
返回在字符串中找到的最后一个成功匹配的字符位置。 | lastIndex 属性
返回比数组中所定义的最高元素大 1 的一个整数。 | length 属性 (Array)
返回为函数所定义的参数个数。 | length 属性 (Function)
返回 String 对象的长度。 | length 属性 (String)
返回 2 的自然对数。 | LN2 属性
返回 10 的自然对数。 | LN10 属性
返回以 2 为底的 e（即欧拉常数）的对数。 | LOG2E 属性
返回以 10 为底的 e（即欧拉常数）的对数。 | LOG10E 属性
返回在 Jscript 中能表示的最大值。 | MAX_VALUE 属性
返回在 Jscript 中能表示的最接近零的值。 | MIN_VALUE 属性
返回特殊值 NaN，表示某个表达式不是一个数。 | NaN 属性 (Global)
返回特殊值 （NaN），表示某个表达式不是一个数。 | NaN 属性 (Number)
返回比在 JScript 中能表示的最大的负数 （-Number.MAX_VALUE）更负的值。 | NEGATIVE_INFINITY 属性
返回或设置与特定错误关联的数值。 | number 属性
返回圆周长与其直径的比值，约等于 3.141592653589793。 | PI 属性
返回比在 JScript 中能表示的最大的数 （Number.MAX_VALUE）更大的值。 | POSITIVE_INFINITY 属性
返回对象类的原型引用。 | prototype 属性
返回正则表达式模式的文本的拷贝。 | source 属性
返回 0.5 的平方根，即 1 除以 2 的平方根。 | SQRT1_2 属性
返回 2 的平方根。 | SQRT2 属性


0...n 属性

返回一个 arguments 对象中的各个参数的实际值，相应的值是由一个正在执行的函数的 arguments 属性返回的。

[function.]arguments[[0|1|2|...|n]]

参数

function
可选项。当前正在执行的 Function 对象的名称。
0, 1, 2, …, n
必选项。0 到 n 范围内的非负整数，其中 0 代表第一个参数而 n 代表最后一个参数。最后参数 n 的值为 arguments.length-1。

说明

0...n 属性所返回的值就是传递给正在执行的函数的实际值。尽管实际上并不是一个参数数组，您还是可以按照与访问数组元素的方法相同的方式访问组成 arguments 对象的各个参数。

示例

下面的例子演示了 arguments 对象的 0...n 属性的用法。要完全理解以下例子，请向该函数传递一个或多个参数：

function ArgTest(){
   var s = "";
   s += "The individual arguments are: "
   for (n=0; n< arguments.length; n++){
      s += ArgTest.arguments[n];
      s += " ";
   }
   return(s);
}
print(ArgTest(1, 2, "hello", new Date()));

要求

版本 5.5

请参阅

应用于：arguments 对象 | Function 对象


$1...$9 属性

返回九个在模式匹配期间找到的、最近保存的部分。只读。

RegExp.$n

参数

RegExp
总是全局 RegExp 对象。

n

1 至 9 间的任意整数。

说明

无论何时产生一个成功的带插入语的匹配，$1...$9 属性的值都被修改，但是只有最近的九个可以被保存起来。

下面的例子举例说明了 $1...$9 属性的用法：

function matchDemo(){
   var s;
   var re = new RegExp("d(b+)(d)","ig");
   var str = "cdbBdbsbdbdz";
   var arr = re.exec(str);
   s = "$1 contains: " + RegExp.$1 + "\n";
   s += "$2 contains: " + RegExp.$2 + "\n";
   s += "$3 contains: " + RegExp.$3;
   return(s);
}

要求

版本 1

请参阅

RegExp 对象的属性 | 正则表达式语法

应用于：RegExp 对象


arguments 属性

为当前执行的 function 对象返回一个arguments 对象。

function.arguments

function 参数是当前执行函数的名称，可以省略。

说明

通过 arguments 属性，函数可以处理可变数量的参数。arguments 对象的 length 属性包含了传递给函数的参数的数目。对于arguments 对象所包含的单个参数，其访问方法与数组中所包含的参数的访问方法相同。

示例

下面的例子说明了 arguments 属性的用法：

function ArgTest(){
   var i, s, numargs = arguments.length;
   s = numargs;
   if (numargs < 2)
      s += " argument was passed to ArgTest. It was ";
   else
      s += " arguments were passed to ArgTest. They were " ;
   for (i = 0; i < numargs; i++)
      {
         s += arguments[i] + " ";
      }
   return(s);
}

要求

版本 2

请参阅

Arguments 对象 | function 语句

应用于：Function 对象


callee 属性

返回正被执行的 Function 对象，也就是所指定的 Function 对象的正文。

[function.]arguments.callee

可选项 function 参数是当前正在执行的 Function 对象的名称。

说明

callee 属性是 arguments 对象的一个成员，仅当相关函数正在执行时才可用。

callee 属性的初始值就是正被执行的 Function 对象。这允许匿名的递归函数。

示例

function factorial(n){
  if (n <= 0)
  return 1;
  else
    return n * arguments.callee(n - 1)
}
print(factorial(3));

要求

版本 5.5

请参阅

应用于：arguments 对象 | Function 对象


caller 属性

返回一个对函数的引用，该函数调用了当前函数。

functionName.caller

functionName 对象是所执行函数的名称。

说明

对于函数来说，caller 属性只有在函数执行时才有定义。如果函数是由 JScript 程序的顶层调用的，那么 caller 包含的就是 null 。

如果在字符串上下文中使用 caller 属性，那么结果和 functionName.toString 一样，也就是说，显示的是函数的反编译文本。

下面的例子说明了 caller 属性的用法：

function CallLevel(){
   if (CallLevel.caller == null)
      return("CallLevel was called from the top level.");
   else
      return("CallLevel was called by another function.");
}

要求

版本2

请参阅

function 语句

应用于：Function 对象


constructor 属性

表示创建对象的函数。

object.constructor

必需的 object是对象或函数的名称。

说明

constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JScript 内部对象。constructor 属性保存了对构造特定对象实例的函数的引用。例如：

x = new String("Hi");
if (x.constructor == String)
   // 进行处理（条件为真）。

或

function MyFunc {
   // 函数体。
}

y = new MyFunc;
if (y.constructor == MyFunc)
   // 进行处理（条件为真）。

要求

版本2

请参阅

prototype 属性

应用于：Array Object | Boolean 对象 | Date 对象 | Function 对象 | Math 对象 | Number 对象 | Object 对象 | String 对象


description 属性

返回或设置与特定错误相联系的描述字符串。

object.description [= stringExpression]

参数

object
必选项。Error 对象的任意实例。
stringExpression
可选项。包含错误描述的字符串表达式。

说明

description 属性包含与特定错误相联系的错误信息字符串。使用包含在这个属性中的值，来警告用户发生了一个不能或不想处理的错误。

下面的例子举例说明了 description 属性的使用：

try
   x = y   // 产生错误。
catch(var e){   // 创建局部变量 e。
   document.write(e)   // 打印 "[object Error]"。
   document.write((e.number & 0xFFFF))   // 打印 5009。
   document.write(e.description)   //打印 "'y' is undefined"。
}

要求

版本5

请参阅

number 属性 | message属性 | name属性

应用于：Error 对象


E 属性

返回 欧拉常数，自然对数的底。E 属性约等于 2.718。

numVar = Math.E

要求

版本1

请参阅

exp 方法 | Math 对象属性

应用于：Math 对象


global 属性 (JScript)

JScript

global 属性

返回 Boolean 值，指出正则表达式使用的global 标志 (g) 的状态。默认值为 false。只读。

rgExp.global

必选项 rgExp 参数是正则表达式对象。

说明

如果正则表达式设置了global 标志，那么global 属性返回 true，否则返回 false。

使用 global 标志表明在被查找的字符串中搜索操作将查找所有符合的项，而不仅仅是第一个。这也被称为全局匹配。

示例

以下示例演示了 global 属性的用法。如果传递 "g" 到下面所示的函数中，那么所有的单词 "the" 将被 "a" 代替。请注意，字符串首的 "The" 不会被替换。这是因为第一个字母是大写的，因此，不能与 "the" 中小写的 "t" 匹配。

本函数返回一个字符串以及一个表，表中显示了与允许使用的正则表达式标志（g、i 和 m）相关的属性值。它还返回经过所有替换操作后的字符串。

function RegExpPropDemo(flag){
   if (flag.match(/[^gim]/))        // 检查标志的有效性。
     return("Flag specified is not valid");
   var r, re, s                    // 声明变量。
   var ss = "The man hit the ball with the bat.\n";
   ss += "while the fielder caught the ball with the glove.";
   re = new RegExp("the",flag);    // 指定要查找的样式。
   r = ss.replace(re, "a");        // 用 "a" 替换 "the"。
   s = "Regular Expression property values:\n\n"
   s += "global  ignoreCase  multiline\n"
   if (re.global)                  // 测试 global 标志。
     s += " True     ";
   else
     s += "False     ";
   if (re.ignoreCase)              // 测试 ignoreCase 标志。
     s += " True  ";
   else
     s += "False  ";
   if (re.multiline)               // 测试 multiline 标志。
     s += "     True     ";
   else
     s += "     False   ";
   s += "\n\nThe resulting string is:\n\n" + r;
   return(s);                      // 返回替换字符串。
}

要求

版本 5.5

请参阅

ignoreCase 属性 | multiline 属性 | 正则表达式语法

应用于：RegExp 对象


hasOwnProperty 方法

返回一个布尔值，指出一个对象是否具有指定名称的属性。

object.hasOwnProperty(proName)

参数

object
必选项。一个对象的实例。
proName
必选项。一个属性名称的字符串值。

说明

如果 object 具有指定名称的属性，那么 hasOwnProperty 方法返回 true；反之则返回 false。此方法无法检查该对象的原型链中是否具有该属性；该属性必须是对象本身的一个成员。

示例

在下例中，所有的 String 对象共享一个公用 split 方法。下面的代码将输出 false 和 true。

var s = new String("JScript");
print(s.hasOwnProperty("split"));
print(String.prototype.hasOwnProperty("split"));

要求

版本 5.5

请参阅

in 运算符

应用于：Object 对象


ignoreCase 属性

返回 Boolean 值，指出正则表达式使用的 ignoreCase 标志(i) 的状态。默认值为 false。只读。

rgExp.ignoreCase

必选项 rgExp 参数为 RegExp 对象。

说明

如果正则表达式设置了 ignoreCase 标志，那么 ignoreCase 属性返回 true，否则返回 false。

如果使用了 ignoreCase 标志，那就表明在被查找的字符串中匹配样式的时候查找操作将不区分大小写。

示例

以下示例演示了 ignoreCase 属性的用法。如果传递 "i" 到下面所示的函数中，那么所有的单词 "the" 将被 "a" 替换，包括最开始位置上的 "The"。这是因为设置了 ignoreCase 标志，搜索操作将不区分大小写。所以在进行匹配的时候 "T" 与 "t" 是等价的。

此函数返回一个字符串以及一个表，表中显示了与允许使用的正则表达式标志（g、i 和 m）相关的属性值。它还返回经过所有替换操作后的字符串。

function RegExpPropDemo(flag){
   if (flag.match(/[^gim]/))        // 检查标志的有效性。
     return("Flag specified is not valid");
   var r, re, s                    // 声明变量。
   var ss = "The man hit the ball with the bat.\n";
   ss += "while the fielder caught the ball with the glove.";
   re = new RegExp("the",flag);    // 指定要查找的样式。
   r = ss.replace(re, "a");        // 利用 "a" 替换 "the"。
   s = "Regular Expression property values:\n\n"
   s += "global  ignoreCase  multiline\n"
   if (re.global)                  // 测试 global 标志。
     s += " True     ";
   else
     s += "False     ";
   if (re.ignoreCase)              // 测试 ignoreCase 标志。
     s += " True  ";
   else
     s += "False  ";
   if (re.multiline)               // 测试 multiline 标志。
     s += "     True     ";
   else
     s += "     False   ";
   s += "\n\nThe resulting string is:\n\n" + r;
   return(s);                      // 返回替换的字符串
}

要求

版本 5.5

请参阅

global 属性 | multiline 属性 | 正则表达式语法

应用于：RegExp 对象


index 属性

返回字符位置，它是查找字符串中第一个成功匹配的开始位置。只读。

RegExp.index

该属性的相关对象总是全局 RegExp 对象。

说明

index 属性是基于零的。其初始值为 -1，不论何时产生一个成功匹配，它的值都将改变。

示例

下例阐明了 index 属性的用法。该函数重复了字符串查找，并将字符串中每一个字的 index 和 lastIndex 值都打印出来。

function RegExpTest(){
  var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
  if (ver >= 5.5){
    var src = "The rain in Spain falls mainly in the plain.";
    var re = /\w+/g;
    var arr;
    while ((arr = re.exec(src)) != null)
       print(arr.index + "-" + arr.lastIndex + "\t" + arr);
  }
  else{
    alert("You need a newer version of JScript for this to work");
  }
}

要求

版本3

请参阅

RegExp 对象的属性 | 正则表达式语法

应用于：RegExp 对象


Infinity 属性

返回 Number.POSITIVE_INFINITY 的初始值。

Infinity

说明

Infinity 属性是 Global 对象的成员，在 Scripting 引擎初始化时变为可用。

要求

版本 3

请参阅

POSITIVE_INFINITY 属性 | NEGATIVE_INFINITY 属性

应用于：Global 对象


input 属性 ($_)

JScript

input 属性($_)

返回执行规范表述查找的字符串。只读。

RegExp.input

与该属性有关的对象总是全局 RegExp 对象。

说明

任何时候改变了被查找的字符串，input 属性的值都会被修改。

下面的例子举例说明了 input 属性的用法：

function inputDemo(){
   var s;
   var re = new RegExp("d(b+)(d)","ig");
   var str = "cdbBdbsbdbdz";
   var arr = re.exec(str);
   s = "The string used for the match was " + RegExp.input;
   return(s);
}

要求

版本 3

请参阅

RegExp 对象的属性 | 正则表达式语法

应用于：RegExp 对象


isPrototypeOf 方法

返回一个布尔值，指出对象是否存在于另一个对象的原型链中。

object1.isPrototypeOf(object2)

参数

object1
必选项。一个对象的实例。
object2
必选项。另一个对象，将要检查其原型链。

说明

如果 object2 的 原型链中包含object1，那么 isPrototypeOf 方法返回 true。原型链可以用来在同一个对象类型的不同实例之间共享功能。如果 object2 不是一个对象或者 object1 没有出现在 object2 中的原型链中，isPrototypeOf 方法将返回 false。

示例

以下示例阐述了 isPrototypeOf 方法的用法。

function test(){
  var re = new RegExp();                        // 初始化变量。
  return (RegExp.prototype.isPrototypeOf(re));  // 返回 true。
}

要求

版本 5.5

请参阅

应用于：Object 对象


lastIndex 属性

返回字符位置，它是被查找字符串中下一次成功匹配的开始位置。

RegExp.lastIndex

与该属性有关的对象总是全局 RegExp 对象。

说明

lastIndex 属性是基于零的，也就是说，第一个字符的索引是零。其初始值为 -1，不论何时产生一个成功匹配，它的值都被修改。

lastIndex 属性被 RegExp 对象的 exec 和 test 方法，以及 String 对象的 match、replace、和 split 方法修改。

下面的规则应用于 lastIndex 的值：

  • 如果还没有匹配，则 lastIndex 被设置为 -1.
  • 如果 lastIndex 比字符串的长度大，则 test 和 exec 失败，并且 lastIndex 被设置为 -1。
  • 如果 lastIndex 等于字符串的长度，且模式与空字符串匹配，则正则表达式匹配。否则，匹配失败并且 lastIndex 被重置为 -1。
  • 否则，lastIndex 被设置为紧接最近的匹配的下一个位置。

示例

下例阐明了 lastIndex 属性的用法。该函数重复了查找字符串，并打印出字符串中每一个字的 index 和 lastIndex 值。

function RegExpTest(){
  var ver = Number(ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion())
  if (ver >= 5.5){
    var src = "The rain in Spain falls mainly in the plain.";
    var re = /\w+/g;
    var arr;
    while ((arr = re.exec(src)) != null)
       print(arr.index + "-" + arr.lastIndex + "\t" + arr);
  }
  else{
    alert("You need a newer version of JScript for this to work");
  }
}

要求

版本3

请参阅

RegExp 对象的属性 | 正则表达式语法

应用于：RegExp 对象


leftContext 属性 ($`)

返回被查找的字符串中从字符串开始位置到最后匹配之前的位置之间的字符。只读。

RegExp.leftContext

与此属性相关联的对象总是全局 RegExp 对象。

说明

leftContext 属性的初始值是空字符串。只要找到了匹配的字符，leftContext 属性的值就会相应改变。

示例

以下示例阐述了 leftContext 属性的用法：

function matchDemo(){
   var s;                                // 声明变量。
   var re = new RegExp("d(b+)(d)","ig"); // 正则表达式样式。
   var str = "cdbBdbsbdbdz";             // 将被查找的字符串。
   var arr = re.exec(str);               // 进行查找。
   s = "$1 returns: " + RegExp.$1 + "\n";
   s += "$2 returns: " + RegExp.$2 + "\n";
   s += "$3 returns: " + RegExp.$3 + "\n";
   s += "input returns : " + RegExp.input + "\n";
   s += "lastMatch returns: " + RegExp.lastMatch + "\n";
   s += "leftContext returns: " + RegExp.leftContext + "\n";
   s += "rightContext returns: " + RegExp.rightContext + "\n";
   s += "lastParen returns: " + RegExp.lastParen + "\n";
   return(s);                            // 返回结果。
}
document.write(matchDemo());

要求

版本 5.5

请参阅

$1...$9 属性 | index 属性 | input 属性 | lastIndex 属性 | lastMatch 属性 | lastParen 属性 | rightContext 属性

应用于：RegExp 对象


length 属性 (arguments)

返回调用程序传递给函数的实际参数数目。

[function.]arguments.length

可选项 function 参数是当前正在执行的 Function 对象的名称。

说明

当 Function 对象开始执行时，脚本引擎将 arguments 对象的 length 属性初始化为传递给该函数的实际参数数目。

示例

下面的例子演示了 arguments 对象的 length 属性的用法。要完全理解示例，请向该函数传递更多的参数：

function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";
   var numargs = arguments.length;
   var expargs = ArgTest.length;
   if (expargs < 2)
      s += expargs + " argument. ";
   else
      s += expargs + " arguments. ";
   if (numargs < 2)
      s += numargs + " was passed.";
   else
      s += numargs + " were passed.";
   return(s);
}

要求

版本 5.5

请参阅

arguments 属性 | length 属性 (Array) | length 属性 (String)

应用于：arguments 对象 | Function 对象


length 属性 (Array)

返回一个整数值，这个整数比数组中所定义的最高位元素的下标大 1。

numVar = arrayObj.length

参数

numVar
必选项。任意数值。
arrayObj
必选项。任意 Array 对象。

说明

因为一个数组中的元素并不一定是连续的，所以 length 属性也并不一定就等于数组中的元素个数。例如，在下面的数组定义中，my_array.length 中就包含 7，而不是 2：

var my_array = new Array( );
my_array[0] = "Test";
my_array[6] = "Another Test";

如果 length 属性被赋予了一个比原先值小的数值，那么数组就被截断，所有数组下标等于或者大于 length 属性的新值的元素都会被丢失。

如果 length 属性被赋予了一个比原先值大的数值，那么数组就被扩展，且所有新建元素都被赋值为 undefined。

下面这个例子说明了 length 属性的用法:

function LengthDemo(){
   var a;
   a = new Array(0,1,2,3,4);
   return(a.length);
}

要求

版本 2

请参阅

length 属性 (Function) | length 属性 (String)

应用于：Array 对象


lastMatch 属性 ($&)

返回任何正则表达式搜索过程中的最后匹配的字符。只读。

RegExp.lastMatch

与此属性相关联的对象总是全局 RegExp 对象。

说明

lastMatch 属性的初始值是一个空字符串。只要找到了匹配的字符，lastMatch 属性的值就会相应改变。

示例

下面的例子演示了 lastMatch 属性的用法：

function matchDemo(){
   var s;                                // 声明变量。
   var re = new RegExp("d(b+)(d)","ig"); // 正则表达式样式。
   var str = "cdbBdbsbdbdz";             // 要被查找的字符串。
   var arr = re.exec(str);               // 进行查找。
   s = "$1 returns: " + RegExp.$1 + "\n";
   s += "$2 returns: " + RegExp.$2 + "\n";
   s += "$3 returns: " + RegExp.$3 + "\n";
   s += "input returns : " + RegExp.input + "\n";
   s += "lastMatch returns: " + RegExp.lastMatch + "\n";
   s += "leftContext returns: " + RegExp.leftContext + "\n";
   s += "rightContext returns: " + RegExp.rightContext + "\n";
   s += "lastParen returns: " + RegExp.lastParen + "\n";
   return(s);                            // 返回结果。
}
document.write(matchDemo());

要求

版本 5.5

请参阅

$1...$9 属性 | index 属性 | input 属性 | lastIndex 属性 | lastParen 属性 | leftContext 属性 | rightContext 属性

应用于：RegExp 对象


lastParen 属性 ($+)

如果有的话，返回任何正则表达式查找过程中最后括的子匹配。只读。

RegExp.lastParen

与此属性相关的对象总是全局 RegExp 对象。

说明

属性的初始值 lastParen 属性是空字符串。只要成功找到匹配字符，lastParen 属性的值就会相应改变。

示例

下面的例子演示了 lastParen 属性的用法：

function matchDemo(){
   var s;                                //声明变量。
   var re = new RegExp("d(b+)(d)","ig"); //正则表达式样式。
   var str = "cdbBdbsbdbdz";             //将被查找的字符串。
   var arr = re.exec(str);               //进行查找。
   s = "$1 returns: " + RegExp.$1 + "\n";
   s += "$2 returns: " + RegExp.$2 + "\n";
   s += "$3 returns: " + RegExp.$3 + "\n";
   s += "input returns : " + RegExp.input + "\n";
   s += "lastMatch returns: " + RegExp.lastMatch + "\n";
   s += "leftContext returns: " + RegExp.leftContext + "\n";
   s += "rightContext returns: " + RegExp.rightContext + "\n";
   s += "lastParen returns: " + RegExp.lastParen + "\n";
   return(s);                            //返回结果。
}
document.write(matchDemo());

要求

版本 5.5

请参阅

$1...$9 属性 | index 属性 | input 属性 | lastIndex 属性 | lastMatch 属性 | leftContext 属性 | rightContext 属性

应用于：RegExp 对象


length 属性 (Function)

返回函数定义的参数数目。

functionName.length

所必须的functionName 参数是被讨论的函数的名称。

说明

函数的 length 属性是在创建函数实例时由 Scripting 引擎初始化的，值是函数定义中参数的数目。

如果调用函数时参数的数目和它的 length 属性值不同，那么这时发生的情况将依赖于函数本身。

下面的例子说明了 length 属性的用法：

function ArgTest(a, b){
   var i, s = "The ArgTest function expected ";
   var numargs = ArgTest.arguments.length;
   var expargs = ArgTest.length;
   if (expargs < 2)
      s += expargs + " argument. ";
   else
      s += expargs + " arguments. ";
   if (numargs < 2)
      s += numargs + " was passed.";
   else
      s += numargs + " were passed.";
   return(s);
}

要求

版本 2

请参阅

arguments 属性 | length 属性 (Array) | length 属性 (String)

应用于：Function 对象


length 属性 (String)

返回 String 对象的长度。

strVariable.length
"String Literal".length

说明

length 属性包含一个整数，用来指出 String 对象中的字符数。String 对象中的最后一个字符的索引为 length - 1。

要求

版本 1

请参阅

length 属性（Array） | length 属性（Function） | String 对象的方法 | String 对象的属性

应用于：String 对象


LN10 属性

返回 10 的自然对数。

numVar = Math.LN10

说明

LN10 属性约等于 2.302。

要求

版本 1

请参阅

Math 对象属性

应用于：Math 对象


LN2 属性

返回 2 的自然对数。

numVar = Math.LN2

语法

LN2 属性约等于 0.693。

要求

版本 1

请参阅

Math 对象属性

应用于：Math 对象


LOG10E 属性

返回以 10 为底 e（自然对数的底）的对数。

varName = Math.LOG10E

说明

LOG10E 属性，常数，约等于 0.434。

要求

版本 1

请参阅

Math 对象属性

应用于：Math 对象


LOG2E 属性

返回 以 2 为底 e（自然对数的底）的对数。

varName = Math.LOG2E

说明

LOG2E 属性，常数，约等于 1.442。

要求

版本 1

请参阅

Math 对象属性

应用于：Math 对象


MAX_VALUE 属性

返回 JScript 能表达的最大的数。约等于 1.79E+308。

number.MAX_VALUE

number 参数是 Number 对象.

说明

在能够访问 MAX_VALUE 属性前不必创建 Number 对象。

要求

版本 2

请参阅

MIN_VALUE 属性 | NaN 属性 | NEGATIVE_INFINITY 属性 | POSITIVE_INFINITY 属性 | toString 方法

应用于：Number 对象


message 属性

返回一个错误信息字符串。

errorObj.message

参数

errorObj
必选项。Error 对象。

说明

message 属性是一个字符串，其中包含显示给用户的出错消息。它包含与 description 属性相同的信息。

示例

以下示例将导致 TypeError 异常，并显示错误名称及其消息。

try {
  // 'null' 不是有效的对象
  null.doSomething();
}
catch(e){
  print(e.name + ": " + e.message);
  print(e.number + ": " + e.description);
}

要求

版本 5

请参阅

description 属性 | name 属性

应用于：Error 对象


MIN_VALUE 属性

返回 JScript 中能够表示的最接近零的数。约等于 2.22E-308。

number.MIN_VALUE

number 参数是 Number 对象.

说明

在能够访问 MIN_VALUE 属性前不必创建 Number 对象。

要求

版本 2

请参阅

MAX_VALUE 属性 | NaN 属性 | NEGATIVE_INFINITY 属性 | POSITIVE_INFINITY 属性 | toString 方法

应用于：Number 对象


multiline 属性

返回 Boolean 值，指出正则表达式使用的 multiline 标志(m)的状态。默认值为 false。只读。

rgExp.multiline

必选项 rgExp 参数为 RegExp 对象。

说明

如果正则表达式设置了 multiline 标志，那么 multiline 属性返回 true，否则返回 false。如果创建正则表达式对象时使用了 m 标志，那么 multiline 属性就是 true。

如果 multiline 为 false，那么 "^" 匹配字符串的开始位置，而 "$" 匹配字符串的结束位置。如果 multline 为 true，那么 "^" 匹配字符串开始位置以及 "\n" 或 "\r" 之后的位置，而 "$" 匹配字符串结束位置以及 "\n" 或 "\r" 之前的位置。

示例

以下示例演示了 multiline 属性的特征。如果将 "m" 传递给下面所示的函数，单词 "while" 将被替换为 "and"。这是因为设置了 multiline 标志且 "while" 出现在换行字符的下一行的开始位置。multiline 标志允许在多行的字符串中进行查找。

本函数返回一个字符串以及一个表，表中显示了允许使用的正则表达式标志（g、i 和 m）的状态。它还返回经过所有替换操作的字符串。

function RegExpPropDemo(flag){
   if (flag.match(/[^gim]/))          //检查标志的有效性。
     return("Flag specified is not valid");
   var r, re, s                       //声明变量。
   var ss = "The man hit the ball with the bat.";
   ss += "\nwhile the fielder caught the ball with the glove.";
   re = new RegExp("^while",flag);    //指定要查找的样式。
   r = ss.replace(re, "and");         //用 "a" 替换 "the"。
   s = "Regular Expression property values:\n\n"
   s += "global  ignoreCase  multiline\n"
   if (re.global)                     //测试 global 标志。
     s += " True     ";
   else
     s += "False     ";
   if (re.ignoreCase)                 //测试 ignoreCase 标志。
     s += " True  ";
   else
     s += "False  ";
   if (re.multiline)                  //测试 multiline 标志。
     s += "     True     ";
   else
     s += "     False   ";
   s += "\n\nThe resulting string is:\n\n" + r;
   return(s);                         //返回替换的字符串。
}

要求

版本 5.5

请参阅

global 属性 | ignoreCase 属性 | 正则表达式语法

应用于：RegExp 对象


name 属性

返回一个错误的名称。

errorObj.name

参数

errorObj
必选项。Error 对象。

说明

name 属性返回错误名称或异常类型。发生运行时错误时，该错误的名称属性被设置为下列内在的异常类型之一：

异常类型 | 意义
ConversionError | 当试图将一个对象转换为其不能转换的某种类型时，产生本错误。
RangeError | 当函数的某个给出的参数不在允许范围时，发生本错误。例如，当试图建立的 Array 对象的长度不是有效的正整数时就会发生本错误。
ReferenceError | 当检测到无效的引用时，发生本错误。例如，如果所想要使用的引用为 null 时就会发生本错误。
RegExpError | 当正则表达式产生编译错误时，发生本错误。然而，只要该正则表达式经过了编译，就不会产生本错误。例如，如果使用无效语法，或标志不为 i、g、m，或者同一标志出现多次的样式声明正则表达式时，就会发生本错误。
SyntaxError | 当对错误语法的源文本进行解析时，发生本错误。例如，调用 eval 函数时其参数不是有效的程序文本，就会发生本错误。
TypeError | 只要算子的实际类型与所期望的类型不符合，就会发生本错误。例如，如果进行函数调用的不是对象或者不支持该调用，发生本错误。
URIError | 当检测到非法的统一资源标识符 (URI) 时发生本错误。例如，在被编码或解码的字符串中发现非法字符，就会发生本错误。

示例

以下示例将导致 TypeError 异常，并显示该错误的名称及其消息。

try {
  // 'null' 不是有效的对象
  null.doSomething();
}
catch(e){
  print(e.name + ": " + e.message);
  print(e.number + ": " + e.description);
}

要求

版本 5.5

请参阅

description 属性 | message 属性 | number 属性

应用于：Error 对象


NaN 属性

表示算术表达式返回非数字值的特殊值。

number.NaN

number 参数是Number 对象.

说明

在能够访问 NaN 属性前不必创建 Number 对象。

NaN 不与任何值相等，包括其本身。要检测值是否为 NaN，请使用 isNaN 函数。

要求

版本 2

请参阅

isNaN 方法 | MAX_VALUE 属性 | MIN_VALUE 属性 | NEGATIVE_INFINITY 属性 | POSITIVE_INFINITY 属性 | toString 方法

应用于：Number 对象


NaN 属性 (Global)

返回特殊值 NaN ，表示表达式不是数字。

NaN

说明

NaN 属性 （不是数字）是 Global 对象的成员，在 Scripting 引擎初始化时变为可用。

要求

版本 3

请参阅

isNaN 方法

应用于：Global 对象


NEGATIVE_INFINITY 属性

返回比 JScript 能够表示的最小负数（-Number.MAX_VALUE）更小的值。

number.NEGATIVE_INFINITY

number 参数是 Number 对象.

说明

在能够访问 NEGATIVE_INFINITY 属性前不必创建 Number 对象。

JScript 将 NEGATIVE_INFINITY 值显示为 -infinity。该值数学上的作用与负无穷相同。

要求

版本 2

请参阅

MAX_VALUE 属性 | MIN_VALUE 属性 | NaN 属性 | POSITIVE_INFINITY 属性 | toString 方法

应用于：Number 对象


number 属性

返回或设置与特定错误相联系的数字值。Error 对象的默认属性是 number。

object.number [= errorNumber]

参数

object
任意 Error 对象的实例。
errorNumber
表示一个错误的整数。

说明

错误号是一个 32 位的值。高 16 位字是设施代码，而低字才是真正的错误代码。

下面的例子举例说明了 number 属性的用法：

try
   x = y   // 产生错误。
catch(var e){   // 创建全局变量 e。
   document.write(e)   // 打印 "[object Error]".
   document.write(e.number>>16 & 0x1FFF)   // 打印设施代码 10。
   document.write(e.number & 0xFFFF)   // 打印错误代码 5009。
   document.write(e.description)   // 打印“'y' is undefined”。
}

要求

版本 5

请参阅

description 属性 | message 属性 | name 属性

应用于：Error 对象


PI 属性

返回圆的周长与其直径的比值，约等于 3.141592653589793。

numVar = Math.PI

语法

PI 属性，常数，约等于3.14159.

要求

版本 1

请参阅

Math 对象属性

应用于：Math 对象


POSITIVE_INFINITY 属性

返回比在 JScript 中能够表示的最大的数 (Number.MAX_VALUE) 更大的值。

Number.POSITIVE_INFINITY

number 参数是 Number 对象.

说明

在能够访问 POSITIVE_INFINITY 属性前不必创建 Number 对象。

JScript 将 POSITIVE_INFINITY 值显示为 infinity。该值数学上的作用与正无穷相同。

要求

版本 2

请参阅

MAX_VALUE 属性 | MIN_VALUE 属性 | NaN 属性 | NEGATIVE_INFINITY 属性 | toString 方法

应用于：Number 对象


propertyIsEnumerable 属性

返回 Boolean 值，指出所指定的属性是否为一个对象的一部分以及该属性是否是可列举的。

object.propertyIsEnumerable(proName)

参数

object
必选项。一个对象。
proName
必选项。一个属性名称的字符串值。

说明

如果 proName 存在于 object 中且可以使用一个 For…In 循环穷举出来，那么 propertyIsEnumerable 属性返回 true。如果 object 不具有所指定的属性或者所指定的属性不是可列举的，那么 propertyIsEnumerable 属性返回 false。典型地，预定义的属性不是可列举的，而用户定义的属性总是可列举的。

propertyIsEnumerable 属性不考虑原型链中的对象。

示例

function testIsEnumerable(){
  var a = new Array("apple", "banana", "cactus");
  return(a.propertyIsEnumerable(1));
}

要求

版本 5.5

请参阅

应用于：Object 对象


prototype 属性

返回对象类型原型的引用。

objectName.prototype

objectName 参数是对象的名称。

说明

用 prototype 属性提供对象的类的一组基本功能。对象的新实例“继承”赋予该对象原型的操作。

例如，要为 Array 对象添加返回数组中最大元素值的方法。要完成这一点，声明该函数，将它加入 Array.prototype，并使用它。

function array_max( ){
   var i, max = this[0];
   for (i = 1; i < this.length; i++)
   {
   if (max < this[i])
   max = this[i];
   }
   return max;
}
Array.prototype.max = array_max;
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );

该代码执行后，y 保存数组 x 中的最大值，或说 6。

所有 JScript 内部对象都有只读的 prototype 属性。可以象该例中那样为原型添加功能，但该对象不能被赋予不同的原型。然而，用户定义的对象可以被赋给新的原型。

本语言参考中每个内部对象的方法和属性列表指出哪些是对象原型的部分，哪些不是。

要求

版本 2

请参阅

constructor 属性

应用于： Array 对象 | Boolean 对象 | Date 对象 | Function 对象 | Number 对象 | Object 对象 | String 对象


rightContext 属性 ($')

返回被搜索的字符串中从最后一个匹配位置开始到字符串结尾之间的字符。只读。

RegExp.rightContext

与此属性相关联的对象总是全局的 RegExp 对象。

说明

rightContext 属性的初始值是空字符串。只要成功找到了匹配的字符，rightContext 属性的值就会相应改变。

示例

以下示例阐述了 rightContext 属性的用法：

function matchDemo(){
   var s;                                //声明变量。
   var re = new RegExp("d(b+)(d)","ig"); //正则表达式样式。
   var str = "cdbBdbsbdbdz";             //将被查找的字符串。
   var arr = re.exec(str);               //进行查找。
   s = "$1 returns: " + RegExp.$1 + "\n";
   s += "$2 returns: " + RegExp.$2 + "\n";
   s += "$3 returns: " + RegExp.$3 + "\n";
   s += "input returns : " + RegExp.input + "\n";
   s += "lastMatch returns: " + RegExp.lastMatch + "\n";
   s += "leftContext returns: " + RegExp.leftContext + "\n";
   s += "rightContext returns: " + RegExp.rightContext + "\n";
   s += "lastParen returns: " + RegExp.lastParen + "\n";
   return(s);                            //返回结果。
}
document.write(matchDemo());

要求

版本 5.5

请参阅

$1...$9 属性 | index 属性 | input 属性 | lastIndex 属性 | lastMatch 属性 | lastParen 属性 | leftContext 属性

应用于：RegExp 对象


source 属性 (JScript)

JScript

source 属性

返回正则表达式模式的文本的复本。只读。

rgExp.source

rgExp 参数是正则对象。它可以是变量名或文字。

下面的例子举例说明了 source 属性的用法：

function SourceDemo(re, s){
   var s1;
   // 测试字符串中是否存在正则表达式。
   if (re.test(s))
      s1 = " contains ";
   else
      s1 = " does not contain ";
   // 获得正则表达式自己的文本。
   return(s + s1 + re.source);
}

要求

版本 3

请参阅

正则表达式对象的方法 | 正则表达式对象的属性 | 正则表达式的语法

应用于：正则表达式对象


SQRT1_2 属性

返回 0.5 的平方根，或说 2 的平方根分之一。

numVar = Math.SQRT1_2

说明

SQRT1_2 属性，常数，约等于0.707.

要求

版本 1

请参阅

Math 对象属性 | sqrt 方法 | SQRT2 属性

应用于：Math 对象


SQRT2 属性

返回 2 的平方根。

numVar = Math.SQRT2

语法

SQRT2 属性，常数，约等于1.414.

要求

版本 1

请参阅

Math 对象属性 | sqrt 方法 | SQRT1_2 属性

应用于：Math 对象


undefined 属性

返回 undefined 的一个初始值。

undefined

说明

undefined 属性是 Global 对象的一个成员，该属性在脚本引擎初始化后可用。如果已声明了一个变量但还没有初始化，那么该变量的值就是 undefined。

如果还没有声明变量，那么就不能将其与 undefined 进行比较，但是可以将该变量的类型与字符串 "undefined" 进行比较。

当显式地测试变量或将变量设置为 undefined 时，undefined 属性是很有用的。

示例

var declared;                         //声明变量。
if (declared == undefined)            //测试变量。
  document.write("declared has not been given a value.");

if (typeOf(notDeclared) == "undefined")
  document.write("notDeclared has not been defined.");

要求

版本 5.5

请参阅

应用于：Global 对象


JScript 语句

下表列出了 JScript 语句：

描述 | 语言元素
终止当前循环，或者如果与一个 label 语句关联，则终止相关联的语句。 | break 语句
包含在 try 语句块中的代码发生错误时执行的语句。 | catch 语句
激活条件编译支持。 | @cc_on 语句
使单行注释被 JScript 语法分析器忽略。 | // （单行注释语句）
使多行注释被 JScript 语法分析器忽略。 | /*..*/ （多行注释语句）
停止循环的当前迭代，并开始一次新的迭代。 | continue 语句
先执行一次语句块，然后重复执行该循环，直至条件表达式的值为 false。 | do...while 语句
只要指定的条件为 true，就一直执行 for 语句块。 | for 语句
对应于对象或数组中的每个元素执行一个或多个语句。 | for...in 语句
声明一个新的函数。 | function 语句
根据表达式的值，有条件地执行一组语句。 | @if 语句
根据表达式的值，有条件地执行一组语句。 | if...else 语句
给语句提供一个标识符。 | Labeled 语句
从当前函数退出并从该函数返回一个值。 | return 语句
创建用于条件编译语句的变量。 | @set 语句
当指定的表达式的值与某个标签匹配时，即执行相应的一个或多个语句。 | switch 语句
对当前对象的引用。 | this 语句
产生一个可由 try...catch 语句处理的错误条件。 | throw 语句
实现 JScript 的错误处理。 | try 语句
声明一个变量。 | var 语句
执行语句直至给定的条件为 false。 | while 语句
确定一个语句的默认对象。 | with 语句


@cc_on 语句

激活条件编译支持。

@cc_on

说明

@cc_on 语句激活 scripting 引擎中的条件编译。

极力推荐在注释中使用 @cc_on 语句，以使不支持条件编译的浏览器也接受此脚本为有效语法：

/*@cc_on*/
...
（脚本的剩余部分）

作为选择，在注释外的一个 @if 或 @set 语句也会激活条件编译。

要求

版本 3

请参阅

条件编译 | 条件编译变量 | @if 语句 | @set 语句


@if 语句

根据表达式的值，有条件地执行一组语句。

@if (
   condition1
)
   text1
[@elif (
   condition2
)
   text2]
[@else
   text3]
@end

参数

condition1, condition2
可选项。可以强制转换为 Boolean 表达式的表达式。
text1
可选项。condition1 是 true 时要解析的文本。
text2
可选项。condition1 是 false 且 condition2 是 true 时要解析的文本。
text3
可选项。condition1 和 condition2 都是 false 时要解析的文本。

说明

在书写 @if 语句时，不必将每个子句放到不同的行。可以使用多个 @elif 子句。但是，所有 @elif 子句必须在 @else 子句之前出现。

通常使用 @if 语句来决定应当使用若干选项中的哪个选项来进行文本输出。例如：

alert(@if (@_win32) "using Windows NT or Windows 95" @else "using Windows 3.1" @end)

要求

版本 3

请参阅

条件编译 | 条件编译变量 | @cc_on 语句 | @set 语句


@set 语句

用条件编译语句来创建变量。

@set @varname = term

参数

varname
必选项。有效的 JScript 变量名。必须总在前面放置一个 "@" 字符。
term
必选项。零或多个一元运算符，后跟一个常数、条件编译变量、或圆括号括起来的表达式。

说明

条件编译支持数字和 Boolean 变量。不支持字符串。用 @set 创建的变量通常在条件编译语句中使用，但也可以在 JScript 代码的任何地方使用。

变量声明的例子看起来如下：

@set @myvar1 = 12

@set @myvar2 = (@myvar1 * 20)

@set @myvar3 = @_jscript_version

在园括号括起来的表达式中支持下面的运算符：

  • ! ~
  • * / %
  • + -
  • << >> >>>
  • < <= > >=
  • == != === !==
  • & ^ |
  • && ||

如果在变量被定义前使用了这个变量，则它的值是 NaN。NaN 可以用 @if 语句来检查：

@if (@newVar != @newVar)
   ...

这样做能成功是因为 NaN 是不等于它自己的唯一值。

要求

版本 3

请参阅

条件编译 | 条件编译变量 | @cc_on 语句 | @if 语句


break 语句

中断当前循环，或和 label 一起使用，中断相关联的语句。

break [label];

可选的 label 参数指定断点处语句的标签。

说明

通常在 switch 语句和 while、for、for...in、或 do...while 循环中使用 break 语句。最一般的是在 switch 语句中使用 label 参数，但它可在任何语句中使用，无论是简单语句还是复合语句。

执行 break 语句会退出当前循环或语句，并开始脚本执行紧接着的语句。

示例

下面的示例说明了 break 语句的用法。

function BreakTest(breakpoint){
   var i = 0;
   while (i < 100)
   {
   if (i == breakpoint)
      break;
      i++;
   }
   return(i);
}

要求

版本 1

请参阅

continue 语句 | do...while 语句 | for 语句 | for...in 语句 | Labeled 语句 | while 语句


Comment 语句

使注解部分被 JScript 解析器忽略。

语法 1

单行注释：
// comment

语法 2

多行注释：
/*
comment
*/

comment 参数是想要包含到脚本中的注释。

语法 3

//@CondStatement

语法 4

/*@
condStatement
@*/

condStatement 参数是条件编译被激活后使用的条件编译代码。如果使用的是语法 3，则在 "//" 和 "@" 字符间可以没有空格。

说明

用注释来使 JScript 解析器不读取脚本的某些部分。可以使用注释来在程序中包括解释性说明。

如果使用的是语法 1，则解析器忽略在注释标记和行尾间的所有文本。如果使用的是语法 2，则它忽略开始标记和结束标记之间的所有文本。

语法 3 和 4 用来支持条件编译，以保证与不支持那个特性的浏览器兼容。这些浏览器把这些形式的注释分别当成语法 1 和 2 对待。

示例

下面示例说明了 comment 语句的最普通的用法：

function myfunction(arg1, arg2){
   /* 这是多行注释，
      可以根据需要跨越多行。*/
   var r;
   // 这是单行注释。
   r = arg1 + arg2; // 求两个参数的和。
   return(r);
}

要求

版本 1


continue 语句

停止循环的当前迭代，并开始新的迭代。

continue [label];

可选的 label 参数指定 continue 应用于哪条语句。

说明

只能在 while、do...while、for、或 for...in 循环内使用 continue 语句。执行 continue 语句会停止当前循环的迭代，并从循环的开始处继续程序流程。这样对不同的循环类型有如下影响：

  • while 和 do...while 循环检查它们的条件，如果条件为 true，则再次执行循环。
  • for 循环执行它们的递增表达式，如果测试表达式为 true，则再次执行循环。
  • for...in 循环继续进行指定变量的下一个字段，并再次执行循环。

示例

下面示例说明了 continue 语句的用法：

function skip5(){
   var s = "", i=0;
   while (i < 10)
   {
      i++;
      // 跳过 5
      if (i==5)
      {
       continue;
      }
   s += i;
   }
   return(s);
}

要求

版本 1

请参阅

break 语句 | do...while 语句 | for 语句 | for...in 语句 | Labeled 语句 | while 语句


do...while 语句

第一次执行一个语句块，然后重复循环的执行该语句块，直到条件表达式等于 false。

do
   statement
while (expression) ;

参数

statement
可选项。expression 是 true 时要执行的语句。可以是复合语句。
expression
可选项。一个可以强制转换为 Boolean true 或 false 的表达式。如果 expression 是 true，则再执行一次循环。如果 expression 是 false，则结束循环。

说明

在循环的第一次重复执行完成前，不检查 expression 的值，保证至少执行循环一次。此后，循环每成功重复一次后都要检查表达式。

示例

下面的示例阐明了如何使用 do...while 语句来重复 Drives 集合。

function GetDriveList(){
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   do
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
         s +=  n + "<br>";
      e.moveNext();
   }
   while (!e.atEnd());
   return(s);
}

要求

版本 3

请参阅

break 语句 | continue 语句 | for 语句 | for...in 语句 | while 语句 | Labeled 语句


for 语句

只要指定条件为 true 都执行语句块。

for (initialization; test; increment)
   statements

参数

initialization
必选项。一个表达式。该表达式只在执行循环前被执行一次。
test
必选项。一个 Boolean 表达式。如果 test 是 true，则 statement 被执行。如果 test 是 false，则循环结束。
increment
必选项。一个表达式。在每次经过循环的最后执行该递增表达式。
statements
可选项。test 是 true 时，要执行的一个或多个语句。可以是复合语句。

说明

循环要执行确定的次数，通常使用 for 循环。

示例

下面的例子示范了一个 for 循环。

/* 在开始时 i 被设为 0，并在每次重复的最后被增加 1。
在循环重复前，
如果 i 不小于 10，则循环结束。*/
var myarray = new Array();
for (i = 0; i < 10; i++) {
   myarray[i] = i;
}

要求

版本 1

请参阅

for...in 语句 | while 语句


for...in 语句

对应于一个对象的每个属性，或一个数组的每个元素，执行一个或多个语句。

for (variable in [object | array])
   statements

参数

variable
必选项。一个变量，它可以是 object 的任一属性或 array 的任一元素。
object, array
可选项。要在其上遍历的对象或数组。
statement
可选项。相对于 object 的每个属性或 array 的每个元素，都要被执行的一个或多个语句。可以是复合语句。

说明

在循环的每次迭代前，variable 被赋予 object 的下一个属性或 array 的下一个元素。然后可以在循环内的任一语句中使用它，就好像正在使用 object 的该属性或 array 的该元素一样。

当在一个对象上迭代时，没有办法决定或控制把对象的成员赋给 variable 的次序。在数组内将按元素的次序执行迭代，也就是，0、1、2、......

示例

下面示例说明了 for ... in 语句的用法，它把一个对象用作一个联合数组：

function ForInDemo(){
   // 创建某些变量。
   var a, key, s = "";
   // 初始化对象。
   a = {"a" : "Athens" , "b" : "Belgrade", "c" : "Cairo"}
   // 迭代属性。
   for (key in a)   {
      s += a[key] + "&ltBR>";
   }
   return(s);
}
注意 使用 enumerator 对象来迭代集合的成员。

要求

版本 5

请参阅

for 语句 | while 语句


function 语句

声明一个新的函数。

function functionname([arg1 [, arg2 [,...[, argN]]]])
{
   statements
}

参数

functionname
必选项。函数名。
arg1...argN
可选项。函数理解的参数列表、各个参数之间用逗号分开。
statements
可选项。一个或多个 JScript 语句。

说明

使用 function 语句来声明一个稍后要使用的函数。在脚本的其他地方调用该函数前，statements 中包含的代码不被执行。

示例

下面示例说明了 function 语句的用法。

function myfunction(arg1, arg2){
   var r;
   r = arg1 * arg2;
   return(r);
}
注意 在调用函数时，确保总是包括了圆括号以及任何需要的参数。不带圆括号调用函数将导致返回函数的文本，而不是函数的结果。

要求

版本 1

请参阅

new 运算符


if...else 语句

根据一个表达式的值，有条件地执行一组语句。

if (condition)
   statement1
[else
   statement2]

参数

condition
必选项。一个 Boolean 表达式。如果 condition 是 null 或undefined，则 condition 被当作 false。
statement1
可选项。condition 是 true 时要执行的语句。可以是复合语句。
statement2
可选项。condition 是 false 时要被执行的语句。可以是复合语句。

说明

把 statement1 和 statement2 括在大括号 ({}) 内通常是一个好习惯，这样就更清楚，并可以避免无意中造成错误。

示例

在下面的示例中，您可能打算把 else 和第一个 if 语句匹配，但它实际上却是和第二个相匹配的。

if (x == 5)
   if (y == 6)
      z = 17;
else
   z = 20;

按如下方法改写代码可以消除任何含混不清：

if (x == 5)
   {
   if (y == 6)
      z = 17;
   }
else
   z = 20;

同样，如果希望添加一个语句到 statement1，同时不使用大括号，则可能会产生错误：

if (x == 5)
   z = 7;
   q = 42;
else
   z = 19;

在这种情况下，有一个语法错误，因为在 if 和 else 语句之间有多条语句。在 if 和 else 之间的语句需要大括号。

要求

版本 1

请参阅

条件运算符 (?:)


Labeled 语句

为语句提供一个标识符。

label :
   statements

参数

label
必选项。在引用有标签的语句时使用的一个唯一的标识符。
statement
可选项。与 label 相关联的一个或多个语句。可以是复合语句。

说明

标签由 break 和 continue 语句使用，用来指示 break 和 continue 应用于哪个语句。

示例

在下面的语句中，continue 语句使用一个 labeled 语句来创建一个数组，在该数组中，每行的第三列包含一个未定义的值：

function labelDemo(){
   var a = new Array();
   var i, j, s = "", s1 = "";
   Outer:
      for (i = 0; i < 5; i++)
      {
         Inner:
            for (j = 0; j < 5; j++)
            {
               if (j == 2)
                  continue Inner;
               else
                  a[i,j] = j + 1;
            }
      }
      for (i = 0;i < 5; i++)
      {
         s = ""
         for (j = 0; j < 5; j++)
         {
            s += a[i,j];
         }
         s1 += s + "\n";
      }
      return(s1)
}

要求

版本 3

请参阅

break 语句 | continue 语句


return 语句

从当前函数退出，并从那个函数返回一个值。

return[()[expression][]];

可选项 expression 参数是要从函数返回的值。如果省略，则该函数不返回值。

说明

用 return 语句来终止一个函数的执行，并返回 expression 的值。如果 expression 被省略，或在函数内没有 return 语句被执行，则把值 undefined 赋给调用当前函数的表达式。

示例

下面示例说明了 return 语句的用法。

function myfunction(arg1, arg2){
   var r;
   r = arg1 * arg2;
   return(r);
}

要求

版本 1

请参阅

function 语句


switch 语句

当指定的表达式的值与某个标签匹配时，即执行相应的一个或多个语句。

switch (expression) {
   case label :
       statementlist
   case label :
       statementlist
   ...
   default :
       statementlist
}

参数

expression
要求值的表达式。
label
根据 expression 来匹配的标识符。如果 label === expression，则立即从冒号后的 statementlist 处开始执行，直到遇到一个可选的 break 语句，或到达 switch 语句的最后。
statementlist
要被执行的一个或多个语句。

说明

使用 default 子句来提供一个语句，该语句只在没有任何一个标签值与 expression 相匹配时才被执行。它可以出现在 switch 代码块内的任何地方。

可以指定零或多个 label 块。如果没有 label 和 expression 的值匹配，并且没有提供 default 情况，则不执行任何语句。

通过 switch 语句执行流程如下：

  • 求 expression 的值并依次序查看 label，直到找到一个匹配。
  • 如果 label 的值等于 expression 的值，则执行它相应的 statementlist。
    继续执行，直到遇到一个 break 语句，或者 switch 语句结束。这意味着如果没有使用一个 break 语句，则多个 label 块被执行。
  • 如果没有 label 等于 expression 的值，则跳转到 default 情况。如果没有 default 情况，则跳转到最后一步。
  • 继续执行紧接 switch 代码块末尾的语句。

示例

下面示例测试一个对象的类型：

function MyObject() {
...}

switch (object.constructor){
   case Date:
   ...
   case Number:
   ...
   case String:
   ...
   case MyObject:
   ...
   default:
   ...
}

要求

版本 3

请参阅

break 语句 | if...else 语句


this 语句

指当前对象。

this.property

必选的 property 参数指的是对象的属性。

说明

this 关键字通常在对象的构造函数中使用，用来引用对象。

示例

在下面示例中，this 指的是新创建的 Car 对象，并给三个属性赋值。

function Car(color, make, model){
   this.color = color;
   this.make = make;
   this.model = model;
}

对于 JScript 的客户版本，如果在其他所有对象的上下文之外使用 this，则它指的是 window 对象。

要求

版本 1

请参阅

new 运算符


throw 语句

产生一个能被 try...catch...finally 语句处理的错误情形。

throw exception

必选的 exception 参数可以是任何表达式。

说明

下面的例子根据传递进来的值扔出一个错误，然后举例说明那个错误是如何在 try...catch...finally语句的层次中被处理的：

function TryCatchDemo(x){
   try {
      try {
      if (x == 0)   // 估参数的值。
         throw "x equals zero";   // 扔出一个错误。
      else
         throw "x does not equal zero";   // 扔出一个不同的错误。
      }
      catch(e) {   // 在这儿处理 "x = 0" 的错误。
         if (e == "x equals zero")   // 检查错误能否在这儿被处理。
            return(e + " handled locally.");   // 返回对象错误信息。
         else   // 不能在这儿处理这个错误。
            throw e;   // 重新扔出该错误给下一个
      }   // 错误处理程序。
   }
   catch(e) {   // 在此处理其他错误。
      return(e + " handled higher up.");   // 返回错误信息。
   }
}
document.write(TryCatchDemo(0));
document.write(TryCatchDemo(1));

要求

版本 5

请参阅

try...catch 语句


try...catch...finally 语句

为 JScript 实现错误处理。

try {
   tryStatements}
catch(exception){
   catchStatements}
finally {
   finallyStatements}

参数

tryStatement
必选项。可能发生错误的语句。
exception
必选项。任何变量名。exception 的初始化值是扔出的错误的值。
catchStatement
可选项。处理在相关联的 tryStatement 中发生的错误的语句。
finallyStatements
可选项。在所有其他过程发生之后无条件执行的语句。

说明

try...catch...finally 语句提供了一种方法来处理可能发生在给定代码块中的某些或全部错误，同时仍保持代码的运行。如果发生了程序员没有处理的错误，JScript 只给用户提供它的普通错误信息，就好象没有错误处理一样。

tryStatements 参数包含可能发生错误的代码，而 catchStatement 则包含处理任何发生了的错误的代码。如果在 tryStatements 中发生了一个错误，则程序控制被传给 catchStatements 来处理。exception 的初始化值是发生在 tryStatements 中的错误的值。如果错误不发生，则不执行 catchStatements。

如果在与发生错误的 tryStatements 相关联的 catchStatements 中不能处理该错误，则使用 throw 语句来传播、或重新扔出这个错误给更高级的错误处理程序。

在执行完 tryStatements 中的语句，并在 catchStatements 的所有错误处理发生之后，可无条件执行 finallyStatements 中的语句。

请注意，即使在 try 或 catch 块中返回一个语句，或在 catch 块重新扔出一个错误，仍然会执行 finallyStatements 编码。一般将确保 finallyStatments 的运行，除非存在未处理的错误。（例如，在 catch 块中发生运行时错误。）。

示例

下面的例子阐明了JScript 特例处理是如何进行的。

try {
  print("Outer try running..");
  try {
    print("Nested try running...");
    throw "an error";
  }
  catch(e) {
    print("Nested catch caught " + e);
    throw e + " re-thrown";
  }
  finally {
    print("Nested finally is running...");
  }
}
catch(e) {
  print("Outer catch caught " + e);
}
finally {
  print("Outer finally running");
}
// Windows Script Host 作出该修改从而得出 WScript.Echo(s)
function print(s){
   document.write(s);
}

将得出以下结果：

Outer try running..
Nested try running...
Nested catch caught an error
Nested finally is running...
Outer catch caught an error re-thrown
Outer finally running

要求

版本 5

请参阅

throw 语句


var 语句

声明变量。

var variable1 [ = value1 ] [, variable2 [ = value2], ...]

参数

variable, variable2
被声明的变量的名字。
value, value2
赋给变量的初始化值。

说明

使用 var 语句来声明变量。这些变量可以在声明时或声明后在脚本中被赋值。下面是声明的例子：

示例

下例阐明了var 语句的用法。

var index;
var name = "Thomas Jefferson";
var answer = 42, counter, numpages = 10;

要求

版本 1

请参阅

function 语句 | new 运算符


while 语句

执行一个语句，直到指定的条件为 false。

while (expression)
   statements

参数

expression
必选项。Boolean 表达式，在循环的每次迭代前被检查。如果 expression 是 true，则执行循环。如果 expression 是 false，则结束循环。
statements
可选项。expression 是 true 时要执行的一个或多个语句。

说明

while 语句在循环第一次被执行前检查 expression。如果 expression 此次是 false，则该循环一次都不被执行。

示例

下面示例说明了 while 语句的用法：

function BreakTest(breakpoint){
   var i = 0;
   while (i < 100)
   {
   if (i == breakpoint)
      break;
      i++;
   }
   return(i);
}

要求

版本 1

请参阅

break 语句 | continue 语句 | do...while 语句 | for 语句 | for...in 语句


with 语句 (JScript)

JScript

with 语句

为语句设定默认对象。

with (object)
   statements

参数

object
新的默认对象。
statements
一个或多个语句，object 是该语句的默认对象。

说明

with 语句通常用来缩短特定情形下必须写的代码量。在下面的例子中，请注意 Math 的重复使用：

x = Math.cos(3 * Math.PI) + Math.sin(Math.LN10)
y = Math.tan(14 * Math.E)

当使用 with 语句时，代码变得更短且更易读：

with (Math){
   x = cos(3 * PI) + sin (LN10)
   y = tan(14 * E)
}

要求

版本 1

请参阅

this 语句


VBScript

VBScipt 用户指南

VBScript 语言参考


VBScript 用户指南

什么是 VBScript?

在 HTML 页面中添加 VBScript 代码

VBScript 基础

VBScript 数据类型

VBScript 变量

VBScript 常数

VBScript 运算符

使用条件语句

使用循环语句

VBScript 过程

VBScript 编码约定


什么是 VBScript？

Microsoft Visual Basic Scripting Edition 将灵活的脚本应用于更广泛的领域，包括 Microsoft Internet Explorer 中的 Web 客户机脚本和 Microsoft Internet Information Service 中的 Web 服务器脚本。

易学易用

如果您已了解 Visual Basic 或 Visual Basic for Applications (VBA)，就会很快熟悉 VBScript。即使您没有学过 Visual Basic，只要学会 VBScript，就能够使用所有的 Visual Basic 语言进行程序设计。虽然您可以从本教程的几个 Web 页面中学习 VBscript，但是本教程并没有告诉您如何编程。要学习编程，请阅读由 Microsoft Press 出版的《Step by Step》。

Windows 脚本

VBScript 使用 Windows 脚本与宿主应用程序对话。使用 Windows 脚本，浏览器和其他宿主应用程序不再需要每个脚本部件的特殊集成代码。Windows 脚本使宿主可以编译脚本、获取和调用入口点及管理开发者可用的命名空间。通过 Windows 脚本，语言厂商可以建立标准脚本运行时语言。Microsoft 将提供 VBScript 的运行时支持。Microsoft 正在与多个 Internet 组一起定义 Windows 脚本标准以使脚本引擎可以互换。Windows 脚本可用在 Microsoft® Internet Explorer 和 Microsoft® Internet Information Service 中。

其他应用程序和浏览器中的 VBScript

作为开发者，您可以在您的产品中免费使用 VBScript 源实现程序。Microsoft 为 32 位 Windows® API、16 位 Windows API 和 Macintosh® 提供 VBscript 的二进制实现程序。VBScript 与 World Wide Web 浏览器集成在一起。VBScript 和 Windows 脚本也可以在其他应用程序中作为普通脚本语言使用。


在 HTML 页面中添加 VBScript 代码

SCRIPT 元素用于将 VBScript 代码添加到 HTML 页面中。

<SCRIPT> 标记

VBScript 代码写在成对的 <SCRIPT> 标记之间。例如，以下代码为一个测试传递日期的过程：

<SCRIPT LANGUAGE="VBScript">
<!--
   Function CanDeliver(Dt)
      CanDeliver = (CDate(Dt) - Now()) > 2
   End Function
-->
</SCRIPT>

代码的开始和结束部分都有 <SCRIPT> 标记。LANGUAGE 属性用于指定所使用的脚本语言。由于浏览器能够使用多种脚本语言，所以必须在此指定所使用的脚本语言。注意 CanDeliver 函数被嵌入在注释标记（<!— 和 —>）中。这样能够避免不能识别 <SCRIPT> 标记的浏览器将代码显示在页面中。

因为以上示例是一个通用函数（不依赖于任何窗体控件），所以可以将其包含在页面的 HEAD 部分：

<HTML>
<HEAD>
<TITLE>订购</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
   Function CanDeliver(Dt)
      CanDeliver = (CDate(Dt) - Now()) > 2
   End Function
-->
</SCRIPT>
</HEAD>
<BODY>
...

SCRIPT 块可以出现在 HTML 页面的任何地方（BODY 或 HEAD 部分之中）。然而最好将所有的一般目标脚本代码放在 HEAD 部分中，以使所有脚本代码集中放置。这样可以确保在 BODY 部分调用代码之前所有脚本代码都被读取并解码。

上述规则的一个值得注意的例外情况是，在窗体中提供内部代码以响应窗体中对象的事件。例如，以下示例在窗体中嵌入脚本代码以响应窗体中按钮的单击事件：

<HTML>
<HEAD>
<TITLE>测试按钮事件</TITLE>
</HEAD>
<BODY>
<FORM NAME="Form1">
   <INPUT TYPE="Button" NAME="Button1" VALUE="单击">
   <SCRIPT FOR="Button1" EVENT="onClick" LANGUAGE="VBScript">
      MsgBox "按钮被单击！"
   </SCRIPT>
</FORM>
</BODY>
</HTML>

大多数脚本代码在 Sub 或 Function 过程中，仅在其他代码要调用它时执行。然而，也可以将 VBScript 代码放在过程之外、SCRIPT 块之中。这类代码仅在 HTML 页面加载时执行一次。这样就可以在加载 Web 页面时初始化数据或动态地改变页面的外观。


未包含在 Visual Basic for Applications 中的 VBScript 特性

下表列出了未包含在 Visual Basic for Applications 中的 VBScript 特性。

分类 | 特性/关键字
声明 | Class
杂项 | Eval Execute
对象 | RegExp
Script 引擎标识 | ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion


未包含在 VBScript 中的 Visual Basic for Applications 特性

下表列出未包含在 VBScript 中的 Visual Basic for Applications 特性。

类别 | 特性/关键字
数组处理 | Option Base 声明数组下界 <> 0
集合 | Add, Count, Item, Remove 使用 ! 字符访问集合
条件编译 | #Const #If...Then...#Else
控制流程 | DoEvents GoSub...Return, GoTo On Error GoTo On...GoSub, On...GoTo Line numbers, Line labels
转换 | CVar, CVDate Str, Val
数据类型 | 除 Variant 外的所有固有数据类型 Type...End Type
日期/时间 | Date 语句、Time 语句
DDE | LinkExecute, LinkPoke, LinkRequest, LinkSend
调试 | Debug.Print End, Stop
声明 | Declare （声明 DLL ） Optional ParamArray Static
错误处理 | Erl Error Resume, Resume Next
文件输入/输出 | 所有传统的基本文件输入/输出 (I/O)
财务 | 所有财务函数
对象操作 | TypeOf
对象 | Clipboard Collection
运算符 | Like
选项 | Deftype Option Base Option Compare Option Private Module
选择条件 | 包含 Is 关键字或任何比较运算符的表达式 包含一系列使用 To 关键字的数值的表达式
字符串 | 固定长度字符串 LSet, RSet Mid 语句 StrConv
使用对象 | 使用 ! 对集合的访问


VBScript 基础

VBScript 数据类型

VBScript 变量

VBScript 常数

VBScript 运算符

使用条件语句

使用循环语句

VBScript 过程

VBScript 编码约定


VBScript 页面的简单样例

一个简单页面

使用 Microsoft® Internet Explorer 可以查看用以下 HTML 代码制作的页面。如果单击页面上的按钮，可看到 VBScript 的运行结果。

<HTML>
<HEAD><TITLE>简单的首页</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Button1_OnClick
   MsgBox "Hello, world!"
End Sub
-->
</SCRIPT>
</HEAD>
<BODY>
<H3>简单的首页</H3><HR>
<FORM><INPUT NAME="Button1" TYPE="BUTTON" VALUE="单击此处"></FORM>
</BODY>
</HTML>

结果虽然有点简单：一个对话框显示一个拉丁短语（意为“看起来非常漂亮”）。然而这段代码实际上作了许多事情。

当 Internet Explorer 读取页面时，找到 <SCRIPT> 标记，识别出 VBScript 代码并保存代码。单击按钮时，Internet Explorer 使按钮与代码连接，并运行该过程。

<SCRIPT> 标记中的 Sub 过程是一个事件过程。过程名包含两部分：一部分为按钮名，即 Button1（从 <INPUT> 标记中的 NAME 属性获取），另一部分为事件名，即 OnClick。两部分由下划线 (_) 连接。单击按钮时，Internet Explorer 查找并运行相应的事件过程，即 Button1_OnClick。

Internet Explorer 在 Internet Explorer Scripting 对象模型文档中定义了可用于窗体控件的事件,它们可以在Microsoft® Web 站点上找到 (http://www.microsoft.com/china)。

页面也可以使用控件与过程的组合。VBScript 与窗体显示了控件之间的一些简单交互作用。

向事件附加代码的其他方法

上述的方法也许是最简单和最常用的，但也可以使用另外两种方法向事件附加 VBScript 代码。一种方法是在定义控件的标记中添加较短的内部代码。例如在单击按钮时，下面的 <INPUT> 标记执行与前面示例相同的操作：

<INPUT NAME="Button1" TYPE="BUTTON"
   VALUE="单击此处" OnClick='MsgBox "Mirabile visu."'>

请注意函数调用包含在单引号中，MsgBox 函数的字符串包含在双引号中。只要用冒号 (:) 分隔语句，就可以使用多条语句。

另一种方法是在 <SCRIPT> 标记中指定特定的控件和事件：

<SCRIPT LANGUAGE="VBScript" EVENT="OnClick" FOR="Button1">
<!--
   MsgBox "Mirabile visu."
-->
</SCRIPT>

由于 <SCRIPT> 标记指定了事件和控件，所以不需要再用 Sub 和 End Sub 语句。


VBScript 特性

下表为 VBScript 特性的列表。

类别 | 关键字
数组处理 | Array Dim, Private, Public, ReDim IsArray Erase LBound, UBound
赋值 | Set
程序注释 | 使用 ' 或 Rem 的程序注释
常数/文字 | Empty Nothing Null True, False
控制流程 | Do...Loop For...Next For Each...Next If...Then...Else Select Case While...Wend With
转换 | Abs Asc, AscB, AscW Chr, ChrB, ChrW CBool, CByte CCur, CDate CDbl, CInt CLng, CSng, CStr DateSerial, DateValue Hex, Oct Fix, Int Sgn TimeSerial, TimeValue
日期/时间 | Date, Time DateAdd, DateDiff, DatePart DateSerial, DateValue Day, Month, MonthName Weekday, WeekdayName, Year Hour, Minute, Second Now TimeSerial, TimeValue
声明 | Class Const Dim, Private, Public, ReDim Function, Sub Property Get, Property Let, Property Set
错误处理 | On Error Err
表达式 | Eval Execute RegExp Replace Test
格式化字符串 | FormatCurrency FormatDateTime FormatNumber FormatPercent
输入/输出 | InputBox LoadPicture MsgBox
文字 | Empty False Nothing Null True
数学 | Atn, Cos, Sin, Tan Exp, Log, Sqr Randomize, Rnd
杂类 | Eval 函数 Execute 语句 RGB 函数
对象 | CreateObject Err 对象 GetObject RegExp
运算符 | 加法 (+),减法 (-) 幂(^) 求余算术运算 (Mod) 乘法 (*), 除法(/) 整除(\) 求补(-) 字符串连接(&) 等于(=), 不等于(<>) 小于(<), 小于等于(<=) 大于(>) 大于等于(>=) Is And, Or, Xor Eqv, Imp
选项 | Option Explicit
过程 | Call Function, Sub Property Get, Property Let, Property Set
四舍五入 | Abs Int, Fix, Round Sgn
Script 引擎 ID | ScriptEngine ScriptEngineBuildVersion ScriptEngineMajorVersion ScriptEngineMinorVersion
字符串 | Asc, AscB, AscW Chr, ChrB, ChrW Filter, InStr, InStrB InStrRev Join Len, LenB LCase, UCase Left, LeftB Mid, MidB Right, RightB Replace Space Split StrComp String StrReverse LTrim, RTrim, Trim
变量 | IsArray IsDate IsEmpty IsNull IsNumeric IsObject TypeName VarType


VBScript 数据类型

VBScript 只有一种数据类型，称为 Variant。Variant 是一种特殊的数据类型，根据使用的方式，它可以包含不同类别的信息。因为 Variant 是 VBScript 中唯一的数据类型，所以它也是 VBScript 中所有函数的返回值的数据类型。

最简单的 Variant 可以包含数字或字符串信息。Variant 用于数字上下文中时作为数字处理，用于字符串上下文中时作为字符串处理。这就是说，如果使用看起来象是数字的数据，则 VBScript 会假定其为数字并以适用于数字的方式处理。与此类似，如果使用的数据只可能是字符串，则 VBScript 将按字符串处理。也可以将数字包含在引号 (" ") 中使其成为字符串。

Variant 子类型

除简单数字或字符串以外，Variant 可以进一步区分数值信息的特定含义。例如使用数值信息表示日期或时间。此类数据在与其他日期或时间数据一起使用时，结果也总是表示为日期或时间。从 Boolean 值到浮点数，数值信息是多种多样的。Variant 包含的数值信息类型称为子类型。大多数情况下，可将所需的数据放进 Variant 中，而 Variant 也会按照最适用于其包含的数据的方式进行操作。

下表显示 Variant 包含的数据子类型：

子类型 | 描述
Empty | 未初始化的 Variant。对于数值变量，值为 0；对于字符串变量，值为零长度字符串 ("")。
Null | 不包含任何有效数据的 Variant。
Boolean | 包含 True 或 False。
Byte | 包含 0 到 255 之间的整数。
Integer | 包含 -32,768 到 32,767 之间的整数。
Currency | -922,337,203,685,477.5808 到 922,337,203,685,477.5807。
Long | 包含 -2,147,483,648 到 2,147,483,647 之间的整数。
Single | 包含单精度浮点数，负数范围从 -3.402823E38 到 -1.401298E-45，正数范围从 1.401298E-45 到 3.402823E38。
Double | 包含双精度浮点数，负数范围从 -1.79769313486232E308 到 -4.94065645841247E-324，正数范围从 4.94065645841247E-324 到 1.79769313486232E308。
Date (Time) | 包含表示日期的数字，日期范围从公元 100 年 1 月 1 日到公元 9999 年 12 月 31 日。
String | 包含变长字符串，最大长度可为 20 亿个字符。
Object | 包含对象。
Error | 包含错误号。

您可以使用转换函数来转换数据的子类型。另外，可使用 VarType函数返回数据的 Variant 子类型。


VBScript 变量

变量是一种使用方便的占位符，用于引用计算机内存地址，该地址可以存储脚本运行时可更改的程序信息。例如，可以创建一个名为 ClickCount 的变量来存储用户单击 Web 页面上某个对象的次数。使用变量并不需要了解变量在计算机内存中的地址，只要通过变量名引用变量就可以查看或更改变量的值。在 VBScript 中只有一个基本数据类型，即 Variant，因此所有变量的数据类型都是 Variant。

声明变量

声明变量的一种方式是使用 Dim 语句、Public 语句和 Private 语句在脚本中显式声明变量。例如：

Dim DegreesFahrenheit

声明多个变量时，使用逗号分隔变量。例如：

Dim Top, Bottom, Left, Right

另一种方式是通过直接在脚本中使用变量名这一简单方式隐式声明变量。这通常不是一个好习惯，因为这样有时会由于变量名被拼错而导致在运行脚本时出现意外的结果。因此，最好使用 Option Explicit 语句显式声明所有变量，并将其作为脚本的第一条语句。

命名规则

变量命名必须遵循 VBScript 的标准命名规则。变量命名必须遵循：

  • 第一个字符必须是字母。
  • 不能包含嵌入的句点。
  • 长度不能超过 255 个字符。
  • 在被声明的作用域内必须唯一。

变量的作用域与存活期

变量的作用域由声明它的位置决定。如果在过程中声明变量，则只有该过程中的代码可以访问或更改变量值，此时变量具有局部作用域并且是过程级变量。如果在过程之外声明变量，则该变量可以被脚本中所有过程所识别，称为 Script 级变量，具有脚本级作用域。

变量存在的时间称为存活期。Script 级变量的存活期从被声明的一刻起，直到脚本运行结束。对于过程级变量，其存活期仅是该过程运行的时间，该过程结束后，变量随之消失。在执行过程时，局部变量是理想的临时存储空间。可以在不同过程中使用同名的局部变量，这是因为每个局部变量只被声明它的过程识别。

给变量赋值

创建如下形式的表达式给变量赋值：变量在表达式左边，要赋的值在表达式右边。例如：

B = 200

标量变量和数组变量

多数情况下，只需为声明的变量赋一个值。只包含一个值的变量被称为标量变量。有时候，将多个相关值赋给一个变量更为方便，因此可以创建包含一系列值的变量，称为数组变量。数组变量和标量变量是以相同的方式声明的，唯一的区别是声明数组变量时变量名后面带有括号 ( )。下例声明了一个包含 11 个元素的一维数组：

Dim A(10)

虽然括号中显示的数字是 10，但由于在 VBScript 中所有数组都是基于 0 的，所以这个数组实际上包含 11 个元素。在基于 0 的数组中，数组元素的数目总是括号中显示的数目加 1。这种数组被称为固定大小的数组。

在数组中使用索引为数组的每个元素赋值。从 0 到 10，将数据赋给数组的元素，如下所示：

 A(0) = 256
 A(1) = 324
 A(2) = 100
 . . .
 A(10) = 55

与此类似，使用索引可以检索到所需的数组元素的数据。例如：

 . . .
 SomeVariable = A(8)
 . . .

数组并不仅限于一维。数组的维数最大可以为 60（尽管大多数人不能理解超过 3 或 4 的维数）。声明多维数组时用逗号分隔括号中每个表示数组大小的数字。在下例中，MyTable 变量是一个有 6 行和 11 列的二维数组：

 Dim MyTable(5, 10)

在二维数组中，括号中第一个数字表示行的数目，第二个数字表示列的数目。

也可以声明动态数组，即在运行脚本时大小发生变化的数组。对数组的最初声明使用 Dim 语句或 ReDim 语句。但是对于动态数组，括号中不包含任何数字。例如：

 Dim MyArray()
 ReDim AnotherArray()

要使用动态数组，必须随后使用 ReDim 确定维数和每一维的大小。在下例中，ReDim 将动态数组的初始大小设置为 25，而后面的 ReDim 语句将数组的大小重新调整为 30，同时使用 Preserve 关键字在重新调整大小时保留数组的内容。

 ReDim MyArray(25)
 . . .
 ReDim Preserve MyArray(30)

重新调整动态数组大小的次数是没有任何限制的，尽管将数组的大小调小时，将会丢失被删除元素的数据。


VBScript 常数

常数是具有一定含义的名称，用于代替数字或字符串，其值从不改变。VBScript 定义了许多内部常数。详细信息，请参阅 VBScript 语言参考。

创建常数

您可以使用 Const 语句在 VBScript 中创建用户自定义常数。使用 Const 语句可以创建名称具有一定含义的字符串型或数值型常数，并给它们赋原义值。例如：

Const MyString = "这是一个字符串。"
Const MyAge = 49

请注意字符串文字包含在两个引号 (" ") 之间。这是区分字符串型常数和数值型常数的最明显的方法。日期文字和时间文字包含在两个井号 (#) 之间。例如：

Const CutoffDate = #6-1-97#

最好采用一个命名方案以区分常数和变量。这样可以避免在运行脚本时对常数重新赋值。例如，可以使用“vb”或“con”作常数名的前缀，或将常数名的所有字母大写。将常数和变量区分开可以在开发复杂的脚本时避免混乱。


VBScript 运算符

VBScript 有一套完整的运算符，包括算术运算符、比较运算符、连接运算符和逻辑运算符。

运算符优先级

当表达式包含多个运算符时，将按预定顺序计算每一部分，这个顺序被称为运算符优先级。可以使用括号越过这种优先级顺序，强制首先计算表达式的某些部分。运算时，总是先执行括号中的运算符，然后再执行括号外的运算符。但是，在括号中仍遵循标准运算符优先级。

当表达式包含多种运算符时，首先计算算术运算符，然后计算比较运算符，最后计算逻辑运算符。所有比较运算符的优先级相同，即按照从左到右的顺序计算比较运算符。算术运算符和逻辑运算符的优先级如下所示：

算术运算符

描述 | 符号
求幂 | ^
负号 | -
乘 | *
除 | /
整除 | \
求余 | Mod
加 | +
减 | -
字符串连接 | &

比较运算符

描述 | 符号
等于 | =
不等于 | <>
小于 | <
大于 | >
小于等于 | <=
大于等于 | >=
对象引用比较 | Is

逻辑运算符

描述 | 符号
逻辑非 | Not
逻辑与 | And
逻辑或 | Or
逻辑异或 | Xor
逻辑等价 | Eqv
逻辑隐含 | Imp

当乘号与除号同时出现在一个表达式中时，按从左到右的顺序计算乘、除运算符。同样当加与减同时出现在一个表达式中时，按从左到右的顺序计算加、减法运算符。

字符串连接 (&) 运算符不是算术运算符，但是在优先级顺序中，它排在所有算术运算符之后和所有比较运算符之前。Is 运算符是对象引用比较运算符。它并不比较对象或对象的值，而只是进行检查，判断两个对象引用是否引用同一个对象。


使用条件语句

控制程序执行

使用条件语句和循环语句可以控制脚本的流程。使用条件语句可以编写进行判断和重复操作的 VBScript 代码。在 VBScript 中可使用以下条件语句：

  • If...Then...Else 语句
  • Select Case 语句

使用 If...Then...Else 进行判断

If...Then...Else 语句用于计算条件是否为 True 或 False，并且根据计算结果指定要运行的语句。通常，条件是使用比较运算符对值或变量进行比较的表达式。有关比较运算符的详细信息，请参阅比较运算符。If...Then...Else 语句可以按照需要进行嵌套。

条件为 True 时运行语句

要在条件为 True 时运行单行语句，可使用 If...Then...Else 语句的单行语法。下例示范了单行语法。请注意此例省略了关键字 Else。

Sub FixDate()
    Dim myDate
    myDate = #2/13/95#
    If myDate < Now Then myDate = Now
End Sub

要运行多行代码，必须使用多行（或块）语法。多行（或块）语法包含 End If 语句，如下所示：

Sub AlertUser(value)
   If value = 0 Then
      AlertLabel.ForeColor = vbRed
      AlertLabel.Font.Bold = True
      AlertLabel.Font.Italic = True
   End If
End Sub

条件为 True 和 False 时分别运行某些语句

可以使用 If...Then...Else 语句定义两个可执行语句块：条件为 True 时运行某一语句块，条件为 False 时运行另一语句块。

Sub AlertUser(value)
   If value = 0 Then
      AlertLabel.ForeColor = vbRed
      AlertLabel.Font.Bold = True
      AlertLabel.Font.Italic = True
   Else
      AlertLabel.Forecolor = vbBlack
      AlertLabel.Font.Bold = False
      AlertLabel.Font.Italic = False
   End If
End Sub

对多个条件进行判断

If...Then...Else 语句的一种变形允许您从多个条件中选择，即添加 ElseIf 子句以扩充 If...Then...Else 语句的功能，使您可以控制基于多种可能的程序流程。例如：

Sub ReportValue(value)
   If value = 0 Then
      MsgBox value
   ElseIf value = 1 Then
      MsgBox value
   ElseIf value = 2 then
      Msgbox value
   Else
      Msgbox "数值超出范围！"
   End If

可以添加任意多个 ElseIf 子句以提供多种选择。使用多个 ElseIf 子句经常会变得很累赘。在多个条件中进行选择的更好方法是使用 Select Case 语句。

使用 Select Case 进行判断

Select Case 结构提供了 If...Then...ElseIf 结构的一个变通形式，可以从多个语句块中选择执行其中的一个。Select Case 语句提供的功能与 If...Then...Else 语句类似，但是可以使代码更加简练易读。

Select Case 结构在其开始处使用一个只计算一次的简单测试表达式。表达式的结果将与结构中每个 Case 的值比较。如果匹配，则执行与该 Case 关联的语句块,示例代码如下：

Select Case Document.Form1.CardType.Options(SelectedIndex).Text
   Case "MasterCard"
      DisplayMCLogo
      ValidateMCAccount
   Case "Visa"
      DisplayVisaLogo
      ValidateVisaAccount
   Case "American Express"
      DisplayAMEXCOLogo
      ValidateAMEXCOAccount
   Case Else
      DisplayUnknownImage
      PromptAgain
End Select

请注意 Select Case 结构只计算开始处的一个表达式（只计算一次），而 If...Then...ElseIf 结构计算每个 ElseIf 语句的表达式，这些表达式可以各不相同。仅当每个 ElseIf 语句计算的表达式都相同时，才可以使用 Select Case 结构代替 If...Then...ElseIf 结构。


使用循环语句

循环用于重复执行一组语句。循环可分为三类：一类在条件变为 False 之前重复执行语句，一类在条件变为 True 之前重复执行语句，另一类按照指定的次数重复执行语句。

在 VBScript 中可使用下列循环语句：

  • Do...Loop： 当（或直到）条件为 True 时循环。
  • While...Wend： 当条件为 True 时循环。
  • For...Next： 指定循环次数，使用计数器重复运行语句。
  • For Each...Next：对于集合中的每项或数组中的每个元素，重复执行一组语句。

使用 Do 循环

可以使用 Do...Loop 语句多次（次数不定）运行语句块。当条件为 True 时或条件变为 True 之前，重复执行语句块。

当条件为 True 时重复执行语句

While 关键字用于检查 Do...Loop 语句中的条件。有两种方式检查条件：在进入循环之前检查条件（如下面的 ChkFirstWhile 示例）；或者在循环至少运行完一次之后检查条件（如下面的 ChkLastWhile 示例）。在 ChkFirstWhile 过程中，如果 myNum 的初始值被设置为 9 而不是 20，则永远不会执行循环体中的语句。在 ChkLastWhile 过程中，循环体中的语句只会执行一次，因为条件在检查时已经为 False。

Sub ChkFirstWhile()
   Dim counter, myNum
   counter = 0
   myNum = 20
   Do While myNum > 10
      myNum = myNum - 1
      counter = counter + 1
   Loop
   MsgBox "循环重复了 " & counter & " 次。"
End Sub

Sub ChkLastWhile()
   Dim counter, myNum
   counter = 0
   myNum = 9
   Do
      myNum = myNum - 1
      counter = counter + 1
   Loop While myNum > 10
   MsgBox "循环重复了 " & counter & " 次。"
End Sub

重复执行语句直到条件变为 True

Until 关键字用于检查 Do...Loop 语句中的条件。有两种方式检查条件：在进入循环之前检查条件（如下面的 ChkFirstUntil 示例）；或者在循环至少运行完一次之后检查条件（如下面的 ChkLastUntil 示例）。只要条件为 False，就会进行循环。

Sub ChkFirstUntil()
   Dim counter, myNum
   counter = 0
   myNum = 20
   Do Until myNum = 10
      myNum = myNum - 1
      counter = counter + 1
   Loop
   MsgBox "循环重复了 " & counter & " 次。"
End Sub

Sub ChkLastUntil()
   Dim counter, myNum
   counter = 0
   myNum = 1
   Do
      myNum = myNum + 1
      counter = counter + 1
   Loop Until myNum = 10
   MsgBox "循环重复了 " & counter & " 次。"
End Sub

退出循环

Exit Do 语句用于退出 Do...Loop 循环。因为通常只是在某些特殊情况下要退出循环（例如要避免死循环），所以可在 If...Then...Else 语句的 True 语句块中使用 Exit Do 语句。如果条件为 False，循环将照常运行。

在下面的示例中，myNum 的初始值将导致死循环。If...Then...Else 语句检查此条件，防止出现死循环。

Sub ExitExample()
   Dim counter, myNum
      counter = 0
      myNum = 9
      Do Until myNum = 10
         myNum = myNum - 1
         counter = counter + 1
         If myNum < 10 Then Exit Do
      Loop
      MsgBox "循环重复了 " & counter & " 次。"
End Sub

使用 While...Wend

While...Wend 语句是为那些熟悉其用法的用户提供的。但是由于 While...Wend 缺少灵活性，所以建议最好使用 Do...Loop 语句。

使用 For...Next

For...Next 语句用于将语句块运行指定的次数。在循环中使用计数器变量，该变量的值随每一次循环增加或减少。

例如，下面的示例将过程 MyProc 重复执行 50 次。For 语句指定计数器变量 x 及其起始值与终止值。Next 语句使计数器变量每次加 1。

Sub DoMyProc50Times()
   Dim x
   For x = 1 To 50
      MyProc
   Next
End Sub

关键字 Step 用于指定计数器变量每次增加或减少的值。在下面的示例中，计数器变量 j 每次加 2。循环结束后，total 的值为 2、4、6、8 和 10 的总和。

Sub TwosTotal()
   Dim j, total
   For j = 2 To 10 Step 2
      total = total + j
   Next
   MsgBox "总和为 " & total & "。"
 End Sub

要使计数器变量递减，可将 Step 设为负值。此时计数器变量的终止值必须小于起始值。在下面的示例中，计数器变量 myNum 每次减 2。循环结束后，total 的值为 16、14、12、10、8、6、4 和 2 的总和。

Sub NewTotal()
   Dim myNum, total
   For myNum = 16 To 2 Step -2
      total = total + myNum
   Next
   MsgBox "总和为 " & total & "。"
End Sub

Exit For 语句用于在计数器达到其终止值之前退出 For...Next 语句。因为通常只是在某些特殊情况下（例如在发生错误时）要退出循环，所以可以在 If...Then...Else 语句的 True 语句块中使用 Exit For 语句。如果条件为 False，循环将照常运行。

使用 For Each...Next

For Each...Next 循环与 For...Next 循环类似。For Each...Next 不是将语句运行指定的次数，而是对于数组中的每个元素或对象集合中的每一项重复一组语句。这在不知道集合中元素的数目时非常有用。

在以下示例中，Dictionary 对象的内容用于将文本分别放置在多个文本框中：

<HTML>
<HEAD><TITLE>窗体与元素</TITLE></HEAD>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub cmdChange_OnClick
   Dim d                   '创建一个变量
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "0", "Athens"     '添加键和项目
   d.Add "1", "Belgrade"
   d.Add "2", "Cairo"

   For Each I in d
       Document.frmForm.Elements(I).Value = D.Item(I)
   Next
End Sub
-->
</SCRIPT>
<BODY>
<CENTER>
<FORM NAME="frmForm"

<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Text"><p>
<Input Type = "Button" NAME="cmdChange" VALUE="单击此处"><p>
</FORM>
</CENTER>
</BODY>
</HTML>


VBScript 过程

在 VBScript 中，过程被分为两类：Sub 过程和 Function 过程。

Sub 过程

Sub 过程是包含在 Sub 和 End Sub 语句之间的一组 VBScript 语句，执行操作但不返回值。Sub 过程可以使用参数（由调用过程传递的常数、变量或表达式）。如果 Sub 过程无任何参数，则 Sub 语句必须包含空括号 ()。

下面的 Sub 过程使用两个固有的（或内置的）VBScript 函数，即 MsgBox 和 InputBox，来提示用户输入信息。然后显示根据这些信息计算的结果。计算由使用 VBScript 创建的 Function 过程完成。此过程在以下讨论之后演示。

Sub ConvertTemp()
   temp = InputBox("请输入华氏温度。", 1)
   MsgBox "温度为 " & Celsius(temp) & " 摄氏度。"
End Sub

Function 过程

Function 过程是包含在 Function 和 End Function 语句之间的一组 VBScript 语句。Function 过程与 Sub 过程类似，但是 Function 过程可以返回值。Function 过程可以使用参数（由调用过程传递的常数、变量或表达式）。如果 Function 过程无任何参数，则 Function 语句必须包含空括号 ()。Function 过程通过函数名返回一个值，这个值是在过程的语句中赋给函数名的。Function 返回值的数据类型总是 Variant。

在下面的示例中，Celsius 函数将华氏度换算为摄氏度。Sub 过程 ConvertTemp 调用此函数时，包含参数值的变量被传递给函数。换算结果返回到调用过程并显示在消息框中。

Sub ConvertTemp()
   temp = InputBox("请输入华氏温度。", 1)
   MsgBox "温度为 " & Celsius(temp) & " 摄氏度。"
End Sub

Function Celsius(fDegrees)
   Celsius = (fDegrees - 32) * 5 / 9
End Function

过程的数据进出

给过程传递数据的途径是使用参数。参数被作为要传递给过程的数据的占位符。参数名可以是任何有效的变量名。使用 Sub 语句或 Function 语句创建过程时，过程名之后必须紧跟括号。括号中包含所有参数，参数间用逗号分隔。例如，在下面的示例中，fDegrees 是传递给 Celsius 函数的值的占位符：

Function Celsius(fDegrees)
   Celsius = (fDegrees - 32) * 5 / 9
End Function

要从过程获取数据，必须使用 Function 过程。请记住，Function 过程可以返回值；Sub 过程不返回值。

在代码中使用 Sub 和 Function 过程

调用 Function 过程时，函数名必须用在变量赋值语句的右端或表达式中。例如：

 Temp = Celsius(fDegrees)

或

 MsgBox "温度为 " & Celsius(fDegrees) & " 摄氏度。"

调用 Sub 过程时，只需输入过程名及所有参数值，参数值之间使用逗号分隔。不需使用 Call 语句，但如果使用了此语句，则必须将所有参数包含在括号之中。

下面的示例显示了调用 MyProc 过程的两种方式。一种使用 Call 语句；另一种则不使用。两种方式效果相同。

Call MyProc(firstarg, secondarg)
MyProc firstarg, secondarg

请注意当不使用 Call 语句进行调用时，括号被省略。


VBScript 编码约定

编码约定是帮助您使用 Microsoft Visual Basic Scripting Edition 编写代码的一些建议。编码约定包含以下内容：

  • 对象、变量和过程的命名规则
  • 注释约定
  • 文本格式和缩进指南

使用一致的编码约定的主要原因是使脚本或脚本集的结构和编码样式标准化，这样代码易于阅读和理解。使用好的编码约定可以使源代码明白、易读、准确，更加直观且与其他语言约定保持一致。

常数命名规则

VBScript 的早期版本不允许创建用户自定义常数。如果要使用常数，则常数以变量的方式实现，且全部字母大写以和其他变量区分。常数名中的多个单词用下划线 (_) 分隔。例如：

 USER_LIST_MAX
 NEW_LINE

这种标识常数的方法依旧可行，但您还可以选择其他方案，用 Const 语句创建真正的常数。这个约定使用大小写混合的格式，并以“con”作为常数名的前缀。例如：

 conYourOwnConstant

变量命名规则

为提高易读和一致性，请在 VBScript 代码中使用以下变量命名规则：

子类型 | 前缀 | 示例
Boolean | bln | blnFound
Byte | byt | bytRasterData
Date (Time) | dtm | dtmStart
Double | dbl | dblTolerance
Error | err | errOrderNum
Integer | int | intQuantity
Long | lng | lngDistance
Object | obj | objCurrent
Single | sng | sngAverage
String | str | strFirstName

变量作用域

变量应定义在尽量小的作用域中。VBScript 变量的作用域如下所示：

作用域 | 声明变量处 | 可见性
过程级 | 事件、函数或子过程。 | 在声明变量的过程中可见。
Script 级 | HTML 页面的 HEAD 部分，任何过程之外。 | 在脚本的所有过程中可见。

变量作用域前缀

随着脚本代码长度的增加，有必要快速区分变量的作用域。在类型前缀前面添加一个单字符前缀可以实现这一点，而不致使变量名过长。

作用域 | 前缀 | 示例
过程级 | 无 | dblVelocity
Script 级 | s | sblnCalcInProgress

描述性变量名和过程名

变量名或过程名的主体应使用大小写混合格式，并且尽量完整地描述其目的。另外，过程名应以动词开始，例如 InitNameArray 或 CloseDialog。

对于经常使用的或较长的名称，推荐使用标准缩写以使名称保持在适当的长度内。通常多于 32 个字符的变量名会变得难以阅读。使用缩写时，应确保在整个脚本中保持一致。例如，在一个脚本或脚本集中随意切换 Cnt 和 Count 将造成混乱。

对象命名规则

下表列出了 VBScript 中可能用到的对象命名规则（推荐）：

对象类型 | 前缀 | 示例
3D 面板 | pnl | pnlGroup
动画按钮 | ani | aniMailBox
复选框 | chk | chkReadOnly
组合框、下拉列表框 | cbo | cboEnglish
命令按钮 | cmd | cmdExit
公共对话框 | dlg | dlgFileOpen
框架 | fra | fraLanguage
水平滚动条 | hsb | hsbVolume
图像 | img | imgIcon
标签 | lbl | lblHelpMessage
直线 | lin | linVertical
列表框 | lst | lstPolicyCodes
旋钮 | spn | spnPages
文本框 | txt | txtLastName
垂直滚动条 | vsb | vsbRate
滑块 | sld | sldScale

代码注释约定

所有过程的开始部分都应有描述其功能的简要注释。这些注释并不描述细节信息（如何实现功能），这是因为细节有时要频繁更改。这样就可以避免不必要的注释维护工作以及错误的注释。细节信息由代码本身及必要的内部注释来描述。

当传递给过程的参数的用途不明显，或过程对参数的取值范围有要求时，应加以说明。如果过程改变了函数和变量的返回值（特别是通过参数引用来改变），也应在过程的开始部分描述该返回值。

过程开始部分的注释应包含以下区段标题。相关样例，请参阅后面的“格式化代码”部分。

区段标题 | 注释内容
目的 | 过程的功能（不是实现功能的方法）。
假设 | 其状态影响此过程的外部变量、控件或其他元素的列表。
效果 | 过程对每个外部变量、控件或其他元素的影响效果的列表。
输入 | 每个目的不明显的参数的解释。每个参数都应占据单独一行并有其内部注释。
返回 | 返回值的解释。

请记住以下几点：

  • 每个重要的变量声明都应有内部注释，描述变量的用途。
  • 应清楚地命名变量、控件和过程，仅在说明复杂细节时需要内部注释。
  • 应在脚本的开始部分包含描述该脚本的概述，列举对象、过程、运算法则、对话框和其他系统从属物。有时一段描述运算法则的假码是很有用的。

格式化代码

应尽可能多地保留屏幕空间，但仍允许用代码格式反映逻辑结构和嵌套。以下为几点提示：

  • 标准嵌套块应缩进 4 个空格。
  • 过程的概述注释应缩进 1 个空格。
  • 概述注释后的最高层语句应缩进 4 个空格，每一层嵌套块再缩进 4 个空格。

下列代码符合 VBScript 编码规范。

'*********************************************************
' 目的：在 UserList 数组中
'          定位指定用户的首次出现。
' 输入：strUserList()：要搜索的用户列表。
'         strTargetUser：要搜索的用户名。
' 返回：索引 strUserList 数组中
'          strTargetUser 的首次出现。
'          如果找不到目标用户，则返回 -1。
'*********************************************************
Function intFindUser (strUserList(), strTargetUser)
    Dim i   ' Loop counter.
    Dim blnFound   ' 找到目标标志
    intFindUser = -1
    i = 0   ' 初始化循环计数器
    Do While i <= Ubound(strUserList) and Not blnFound
      If strUserList(i) = strTargetUser Then
         blnFound = True   ' 将标志设置为 True
         intFindUser = i   ' 将返回值设置成循环计数
      End If
      i = i + 1   ' 递增循环计数器
    Loop
End Function


VBScript 与窗体

简单验证

使用 Visual Basic Scripting Edition，您可以完成通常要在服务器上进行的大量窗体处理工作，也可以完成不能在服务器上进行的工作。

这是一个简单的客户端验证的样例。HTML 代码的结果是一个文本框和一个按钮。如果使用 Microsoft® Internet Explorer 查看用以下代码制作的页面，您会看到一个旁边带有按钮的小文本框。

<HTML>
<HEAD><TITLE>简单验证</TITLE>
<SCRIPT LANGUAGE="VBScript">
<!--
Sub Validate
  Dim TheForm
  Set TheForm = Document.forms("ValidForm")
  If IsNumeric(TheForm.Text1.Value) Then
    If TheForm.Text1.Value < 1 Or TheForm.Text1.Value > 10 Then
      MsgBox "请输入一个 1 到 10 之间的数字。"
    Else
      MsgBox "谢谢。"
    End If
  Else
    MsgBox "请输入数值。"
  End If
End Sub-->
</SCRIPT>
</HEAD>
<BODY>
<H3>简单验证</H3><HR>
<form id="ValidForm" action="nothing.asp" onsubmit="Validate(); return false;" language="jscript">
请输入一个 1 到 10 之间的数字：
<input name="Text1" TYPE="TEXT" SIZE="2">
<input name="Submit" TYPE="Submit" VALUE="提交">
</form>
</BODY>
</HTML>

这个文本框与 VBScript 页面的简单样例中示例的不同之处在于文本框的 Value 属性被用于检查输入值。要使用文本框的 Value 属性，代码必须引用文本框的名称。

每次引用文本框时都应写出全称，即 Document.ValidForm.Text1。但是，当多次引用窗体控件时，可以按照以下步骤操作：首先声明一个变量，然后使用 Set 语句将窗体 Document.ValidForm 赋给变量 TheForm，这样就能使用 TheForm.Text1 引用文本框。常规的赋值语句（例如 Dim）在这里无效，必须使用 Set 来保持对对象的引用。

使用数字

请注意以上示例直接检测输入值是否是一个数字：使用 IsNumeric 函数确定文本框中的字符串是否是一个数字。虽然 VBScript 能够自动转换字符串和数字，但检测用户输入值的数据子类型，并且在必要时使用转换函数始终是一个好的习惯。在用文本框的 Value 属性进行加法运算时，应将它显式地转换为数字，这是因为加号 (+) 运算符不但可进行加法操作，而且可进行字符串连接操作。例如，如果 Text1 中包含“1”，Text2 中包含“2”，您将会看到以下结果：

A = Text1.Value + Text2.Value   ' A 为“12”
A = CDbl(Text1.Value) + Text2.Value   ' A 为 3

验证后将数据传递回服务器

简单验证样例使用的是普通按钮控件。如果使用 Submit 控件，所有数据都会被立即传送到服务器，示例将不会看到数据来进行检查。避免使用 Submit 控件使您可以检查数据，但不能向服务器提交数据。如果要提交数据则需要再添加一行代码，如下所示：

<SCRIPT LANGUAGE="VBScript">
<!--
Sub Button1_OnClick
 Dim TheForm
 Set TheForm = Document.ValidForm
 If IsNumeric(TheForm.Text1.Value) Then
   If TheForm.Text1.Value < 1 Or TheForm.Text1.Value > 10 Then
      MsgBox "请输入一个 1 到 10 之间的数字。"
   Else
      MsgBox "谢谢。"
      TheForm.Submit   ' 数据输入正确，传递到服务器。
   End If
 Else
    MsgBox "请输入数值。"
  End If
End Sub
-->
</SCRIPT>

在数据输入正确时，代码调用窗体对象的 Submit 方法，将数据传递到服务器。除非在数据被传递到服务器之前判断其正误，否则服务器将处理数据，而不论其正确与否。您可以在 Internet Explorer Scripting 对象模型页面上找到关于 Submit 方法和其他方法的全部信息,它们在 Microsoft® Web 站点(http://www.microsoft.com/china)上可以找到。

到目前为止，您只看到了标准 HTML <FORM> 对象。Internet Explorer 还可以使您利用 ActiveX® 控件（以前称为 OLE 控件）和 Java 对象的全部功能创建页面。


Internet Explorer 中的 VBScript

简单的 VBScript 页

VBScript 与窗体

在 VBScript 中使用对象


在 VBScript 中使用对象

使用对象

无论使用的是 ActiveX® 控件（以前称为 OLE 控件）还是 Java 对象，Microsoft Visual Basic Scripting Edition 和 Microsoft® Internet Explorer 都以相同的方式处理它们。如果您使用的是 Internet Explorer 并且安装了 Label 控件，就会看到由以下代码制作的页面。

<OBJECT> 标记用来包含对象，<PARAM> 标记用来设置对象属性的初始值。如果您是 Visual Basic 程序员，您会发现使用 <PARAM> 标记类似于在 Visual Basic 中设置窗体控件的初始属性值。例如，以下代码使用 <OBJECT> 和 <PARAM> 标记将 ActiveX Label 控件添加到页面中：

<OBJECT
   classid="clsid:99B42120-6EC7-11CF-A6C7-00AA00A47DD2"
   id=lblActiveLbl
   width=250
   height=250
   align=left
   hspace=20
   vspace=0
>
<PARAM NAME="Angle" VALUE="90">
<PARAM NAME="Alignment" VALUE="4">
<PARAM NAME="BackStyle" VALUE="0">
<PARAM NAME="Caption" VALUE="一个简单标签">
<PARAM NAME="FontName" VALUE="宋体">
<PARAM NAME="FontSize" VALUE="20">
<PARAM NAME="FontBold" VALUE="1">
<PARAM NAME="FrColor" VALUE="0">
</OBJECT>

象对任何窗体控件一样，可以获取属性、设置属性和调用方法。例如，以下代码包含 <FORM> 控件，可用其对标签控件的两个属性进行操作：

<FORM NAME="LabelControls">
<INPUT TYPE="TEXT" NAME="txtNewText" class='9v'5>
<INPUT TYPE="BUTTON" NAME="cmdChangeIt" VALUE="更改文本">
<INPUT TYPE="BUTTON" NAME="cmdRotate" VALUE="旋转标签">
</FORM>

通过定义过的窗体，cmdChangeIt 按钮的事件过程可更改标签文本：

<SCRIPT LANGUAGE="VBScript">
<!--
Sub cmdChangeIt_onClick
   Dim TheForm
   Set TheForm = Document.LabelControls
   lblActiveLbl.Caption = TheForm.txtNewText.Value
End Sub
-->
</SCRIPT>

代码将对控件和值的引用限定在窗体中，这与简单验证示例中的代码类似。

多个 ActiveX 控件可用于 Internet Explorer。您可以在 Microsoft® Web 站点上 (http://www.microsoft.com/china) 找到关于属性、方法和事件以及控件类名标识符（CLSID）的全部信息。另外还可以在 Internet Explorer 4.0 Author's Guide and HTML Reference页面上找到有关 <OBJECT> 标记的详细信息。

注意 Internet Explorer 的早期版本要求用大括号 ({}) 将 classid 属性括起来，不符合 W3C 规格。在当前版本中使用大括号则会产生“此页使用了过期版本的 <OBJECT> 标记”信息。


正则表达式语法

一个正则表达式就是由普通字符（例如字符 a 到 z）以及特殊字符（称为元字符）组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板，将某个字符模式与所搜索的字符串进行匹配。

这里有一些可能会遇到的正则表达式示例：

JScript | VBScript | 匹配
/^\[ \t]*$/ | "^\[ \t]*$" | 匹配一个空白行。
/\d{2}-\d{5}/ | "\d{2}-\d{5}" | 验证一个ID 号码是否由一个2位数字，一个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/ | "<(.*)>.*<\/\1>" | 匹配一个 HTML 标记。

下表是元字符及其在正则表达式上下文中的行为的一个完整列表：

字符 | 描述
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如，'n' 匹配字符 "n"。'\n' 匹配一个换行符。序列 '\\' 匹配 "\" 而 "\(" 则匹配 "("。
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。
* | 匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ | 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。
? | 匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} | n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。
{n,} | n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} | m 和 n 均为非负整数，其中n <= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
? | 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时，匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串，而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如，对于字符串 "oooo"，'o+?' 将匹配单个 "o"，而 'o+' 将匹配所有 'o'。
. | 匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。
(pattern) | 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到，在VBScript 中使用 SubMatches 集合，在JScript 中则使用 $0…$9 属性。要匹配圆括号字符，请使用 '\(' 或 '\)'。
(?:pattern) | 匹配 pattern 但不获取匹配结果，也就是说这是一个非获取匹配，不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合一个模式的各个部分是很有用。例如， 'industr(?:y|ies) 就是一个比 'industry|industries' 更简略的表达式。
(?=pattern) | 正向预查，在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如，'Windows (?=95|98|NT|2000)' 能匹配 "Windows 2000" 中的 "Windows" ，但不能匹配 "Windows 3.1" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始。
(?!pattern) | 负向预查，在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配，也就是说，该匹配不需要获取供以后使用。例如'Windows (?!95|98|NT|2000)' 能匹配 "Windows 3.1" 中的 "Windows"，但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字符，也就是说，在一个匹配发生后，在最后一次匹配之后立即开始下一次匹配的搜索，而不是从包含预查的字符之后开始
x|y | 匹配 x 或 y。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。
[xyz] | 字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。
[^xyz] | 负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。
[a-z] | 字符范围。匹配指定范围内的任意字符。例如，'[a-z]' 可以匹配 'a' 到 'z' 范围内的任意小写字母字符。
[^a-z] | 负值字符范围。匹配任何不在指定范围内的任意字符。例如，'[^a-z]' 可以匹配任何不在 'a' 到 'z' 范围内的任意字符。
\b | 匹配一个单词边界，也就是指单词和空格间的位置。例如， 'er\b' 可以匹配"never" 中的 'er'，但不能匹配 "verb" 中的 'er'。
\B | 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er'，但不能匹配 "never" 中的 'er'。
\cx | 匹配由 x 指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。
\d | 匹配一个数字字符。等价于 [0-9]。
\D | 匹配一个非数字字符。等价于 [^0-9]。
\f | 匹配一个换页符。等价于 \x0c 和 \cL。
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。
\r | 匹配一个回车符。等价于 \x0d 和 \cM。
\s | 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t | 匹配一个制表符。等价于 \x09 和 \cI。
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w | 匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
\W | 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'。
\xn | 匹配 n，其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如，'\x41' 匹配 "A"。'\x041' 则等价于 '\x04' & "1"。正则表达式中可以使用 ASCII 编码。.
\num | 匹配 num，其中 num 是一个正整数。对所获取的匹配的引用。例如，'(.)\1' 匹配两个连续的相同字符。
\n | 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式，则 n 为向后引用。否则，如果 n 为八进制数字 (0-7)，则 n 为一个八进制转义值。
\nm | 标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式，则 nm 为向后引用。如果 \nm 之前至少有 n 个获取，则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足，若 n 和 m 均为八进制数字 (0-7)，则 \nm 将匹配八进制转义值 nm。
\nml | 如果 n 为八进制数字 (0-3)，且 m 和 l 均为八进制数字 (0-7)，则匹配八进制转义值 nml。
\un | 匹配 n，其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如， \u00A9 匹配版权符号 (©)。


建立正则表达式

构造正则表达式的方法和创建数学表达式的方法一样。也就是用多种元字符与操作符将小的表达式结合在一起来创建更大的表达式。

可以通过在一对分隔符之间放入表达式模式的各种组件来构造一个正则表达式。对 JScript 而言，分隔符为一对正斜杠 (/) 字符。例如：

/expression/

对 VBScript 而言，则采用一对引号 ("") 来确定正则表达式的边界。例如：

"expression"

在上面所示的两个示例中，正则表达式模式 (expression) 均存储在RegExp 对象的Pattern 属性中。

正则表达式的组件可以是单个的字符、字符集合、字符范围、字符间的选择或者所有这些组件的任意组合。


优先权顺序

JScript 和 VBScript 正则表达式

优先级顺序

在构造正则表达式之后，就可以象数学表达式一样来求值，也就是说，可以从左至右并按照一个优先级顺序来求值。

下表从最高优先级到最低优先级列出各种正则表达式操作符的优先级顺序：

操作符 | 描述
\ | 转义符
(), (?:), (?=), [] | 圆括号和方括号
*, +, ?, {n}, {n,}, {n,m} | 限定符
^, $, \anymetacharacter | 位置和顺序
| | “或”操作


特殊字符（正则表达式）

JScript 和 VBScript 正则表达式

特殊字符

有不少元字符在试图对其进行匹配时需要进行特殊的处理。要匹配这些特殊字符，必须首先将这些字符转义，也就是在前面使用一个反斜杠 (\)。下表给出了这些特殊字符及其含义：

特殊字符 | 说明
$ | 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性，则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身，请使用 \$。
( ) | 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符，请使用 \( 和 \)。
* | 匹配前面的子表达式零次或多次。要匹配 * 字符，请使用 \*。
+ | 匹配前面的子表达式一次或多次。要匹配 + 字符，请使用 \+。
. | 匹配除换行符 \n之外的任何单字符。要匹配 .，请使用 \。
[ | 标记一个中括号表达式的开始。要匹配 [，请使用 \[。
? | 匹配前面的子表达式零次或一次，或指明一个非贪婪限定符。要匹配 ? 字符，请使用 \?。
\ | 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如， 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\"，而 '\(' 则匹配 "("。
^ | 匹配输入字符串的开始位置，除非在方括号表达式中使用，此时它表示不接受该字符集合。要匹配 ^ 字符本身，请使用 \^。
{ | 标记限定符表达式的开始。要匹配 {，请使用 \{。
| | 指明两项之间的一个选择。要匹配 |，请使用 \|。


非打印字符

有不少很有用的非打印字符，偶尔必须使用。下表显示了用来表示这些非打印字符的转义序列：

字符 | 含义
\cx | 匹配由x指明的控制字符。例如， \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则，将 c 视为一个原义的 'c' 字符。
\f | 匹配一个换页符。等价于 \x0c 和 \cL。
\n | 匹配一个换行符。等价于 \x0a 和 \cJ。
\r | 匹配一个回车符。等价于 \x0d 和 \cM。
\s | 匹配任何空白字符，包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S | 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t | 匹配一个制表符。等价于 \x09 和 \cI。
\v | 匹配一个垂直制表符。等价于 \x0b 和 \cK。


字符匹配

句点 (.) 匹配一个字符串中任何单个的打印或非打印字符，除了换行符 (\n) 之外。下面的 JScript 正则表达式可以匹配 'aac'、'abc'、'acc'、'adc'如此等等，同样也可以匹配 'a1c'、'a2c'、a-c'以及 a#c'：

/a.c/

等价的 VBScript 正则表达式为：

"a.c"

如果试图匹配一个包含文件名的字符串，其中句点 (.) 是输入字符串的一部分，则可以在正则表达式中的句点前面加上一个反斜杠 (\) 字符来实现这一要求。举例来说，下面的 JScript 正则表达式就能匹配 'filename.ext'：

/filename\.ext/

对 VBScript 而言，等价的表达式如下所示：

"filename\.ext"

这些表达式仍然是相当有限的。它们只允许匹配任何单字符。很多情况下，对从列表中匹配特殊字符十分有用。例如，如果输入文字中包含用数字表示为Chapter 1, Chapter 2诸如此类的章节标题，你可能需要找到这些章节标题。

括号表达式

可以在一个方括号 ([ 和 ]) 中放入一个或多个单字符，来创建一个待匹配的列表。如果字符被放入括号中括起来，则该列表称为括号表达式。括号内和其他任何地方一样，普通字符代表其本身，也就是说，它们匹配输入文字中出现的一处自己。大多数特殊字符在位于括号表达式中时都将失去其含义。这里有一些例外：

  • ']' 字符如果不是第一项，则将结束一个列表。要在列表中匹配 ']' 字符，请将其放在第一项，紧跟在开始的 '[' 后面。
  • '\' 仍然作为转义符。要匹配 '\' 字符，请使用 '\\'。

括号表达式中所包含的字符只匹配该括号表达式在正则表达式中所处位置的一个单字符。下面的 JScript 正则表达式可以匹配 'Chapter 1'、'Chapter 2'、'Chapter 3'、'Chapter 4' 以及 'Chapter 5'：

/Chapter [12345]/

在 VBScript 中要匹配同样的章节标题，请使用下面的表达式：

"Chapter [12345]"

请注意单词 'Chapter' 及后面的空格与括号内的字符的位置关系是固定的。因此，括号表达式只用来指定满足紧跟在单词 'Chapter' 和一个空格之后的单字符位置的字符集合。这里是第九个字符位置。

如果希望使用范围而不是字符本身来表示待匹配的字符，则可以使用连字符将该范围的开始和结束字符分开。每个字符的字符值将决定其在一个范围内的相对顺序。下面的 JScript 正则表达式包含了一个等价于上面所示的括号列表的范围表达式。

/Chapter [1-5]/

VBScript 中相同功能的表达式如下所示：

"Chapter [1-5]"

如果以这种方式指定范围，则开始和结束值都包括在该范围内。有一点特别需要注意的是，在 Unicode 排序中起始值一定要在结束值之前。

如果想在括号表达式中包括连字符，则必须使用下述方法之一：

  • 使用反斜杠将其转义：
    [\-]
  • 将连字符放在括号列表的开始和结束位置。下面的表达式能匹配所有的小写字母和连字符：
    [-a-z]
[a-z-]
  • 创建一个范围，其中开始字符的值小于连字符，而结束字符的值等于或大于连字符。下面两个正则表达式都满足这一要求：
    [!--]
[!-~]

同样，通过在列表开始处放置一个插入符(^)，就可以查找所有不在列表或范围中的字符。如果该插入符出现在列表的其他位置，则匹配其本身，没有任何特殊含义。下面的 JScript 正则表达式匹配章节号大于 5 的章节标题：

/Chapter [^12345]/

对 VBScript 则使用：

"Chapter [^12345]"

在上面所示的示例中，表达式将匹配第九个位置处除1, 2, 3, 4, or 5 之外的任何数字字符。因此， 'Chapter 7' 为一个匹配，同样 'Chapter 9' 也是如此。

上面的表达式可以使用连字符 (-) 表示。对 JScript 为：

/Chapter [^1-5]/

或者，对 VBScript 为：

"Chapter [^1-5]"

括号表达式的典型用法是指定对任何大写或小写字母字符或任何数字的匹配。下面的 JScript 表达式给出了这一匹配：

/[A-Za-z0-9]/

等价的 VBScript 表达式为：

"[A-Za-z0-9]"


限定符

有时候不知道要匹配多少字符。为了能适应这种不确定性，正则表达式支持限定符的概念。这些限定符可以指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。

下表给出了各种限定符及其含义的说明：

字符 | 描述
* | 匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
+ | 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。
? | 匹配前面的子表达式零次或一次。例如，"do(es)?" 可以匹配 "do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} | n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。
{n,} | n 是一个非负整数。至少匹配n 次。例如，'o{2,}' 不能匹配 "Bob" 中的 'o'，但能匹配 "foooood" 中的所有 o。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
{n,m} | m 和 n 均为非负整数，其中n <= m。最少匹配 n 次且最多匹配 m 次。例如，"o{1,3}" 将匹配 "fooooood" 中的前三个 o。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。

对一个很大的输入文档而言，章节数很轻易就超过九章，因此需要有一种方法来处理两位数或者三位数的章节号。限定符就提供了这个功能。下面的JScript 正则表达式可以匹配具有任何位数的章节标题：

/Chapter [1-9][0-9]*/

下面的 VBScript 正则表达式执行同样的匹配：

"Chapter [1-9][0-9]*"

请注意限定符出现在范围表达式之后。因此，它将应用于所包含的整个范围表达式，在本例中，只指定了从 0 到 9 的数字。

这里没有使用 '+' 限定符，因为第二位或后续位置上并不一定需要一个数字。同样也没有使用 '?' 字符，因为这将把章节数限制为只有两位数字。在 'Chapter' 和空格字符之后至少要匹配一个数字。

如果已知章节数限制只有99 章，则可以使用下面的 JScript 表达式来指定至少有一位数字，但不超过两个数字。

/Chapter [0-9]{1,2}/

对 VBScript 可以使用下述正则表达式：

"Chapter [0-9]{1,2}"

上述表达式的缺点是如果有一个章节号大于 99，它仍只会匹配前两位数字。另一个缺点是某些人可以创建一个 Chapter 0，而且仍能匹配。一个更好的用来匹配两位数的 JScript 表达式如下：

/Chapter [1-9][0-9]?/

或者

/Chapter [1-9][0-9]{0,1}/

对 VBScript 而言，下述表达式与上面等价：

"Chapter [1-9][0-9]?"

或者

"Chapter [1-9][0-9]{0,1}"

'*'、'+' 和 '?' 限定符都称之为贪婪的，也就是说，他们尽可能多地匹配文字。有时这根本就不是所希望发生的情况。有时则正好希望最小匹配。

例如，你可能要搜索一个 HTML 文档来查找一处包含在 H1 标记中的章节标题。在文档中该文字可能具有如下形式：

<H1>Chapter 1 – Introduction to Regular Expressions</H1>

下面的表达式匹配从开始的小于号 (<) 到 H1 标记结束处的大于号之间的所有内容。

/<.*>/

VBScript 的正则表达式为：

"<.*>"

如果所要匹配的就是开始的 H1 标记，则下述非贪婪地表达式就只匹配 <H1>。

/<.*?>/

或者

"<.*?>"

通过在 '*'、 '+' 或 '?' 限定符后放置 '?'，该表达式就从贪婪匹配转为了非贪婪或最小匹配。


定位符

到现在为止，所看到的示例都只考虑查找任何地方出现的章节标题。出现的任何一个字符串 'Chapter' 后跟一个空格和一个数字可能是一个真正的章节标题，也可能是对其他章节的交叉引用。由于真正的章节标题总是出现在一行的开始，因此需要设计一个方法只查找标题而不查找交叉引用。

定位符提供了这个功能。定位符可以将一个正则表达式固定在一行的开始或结束。也可以创建只在单词内或只在单词的开始或结尾处出现的正则表达式。下表包含了正则表达式及其含义的列表：

字符 | 描述
^ | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。
$ | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。
\b | 匹配一个单词边界，也就是指单词和空格间的位置。
\B | 匹配非单词边界。

不能对定位符使用限定符。因为在一个换行符或者单词边界的前面或后面不会有连续多个位置，因此诸如 '^*' 的表达式是不允许的。

要匹配一行文字开始位置的文字，请在正则表达式的开始处使用 '^' 字符。不要把 '^' 的这个语法与其在括号表达式中的语法弄混。它们的语法根本不同。

要匹配一行文字结束位置的文字，请在正则表达式的结束处使用 '$' 字符。

要在查找章节标题时使用定位符，下面的 JScript 正则表达式将匹配位于一行的开始处最多有两个数字的章节标题：

/^Chapter [1-9][0-9]{0,1}/

VBScript 中相同功能的正则表达式如下：

"^Chapter [1-9][0-9]{0,1}"

一个真正的章节标题不仅出现在一行的开始，而且这一行中也仅有这一个内容，因此，它必然也位于一行的结束。下面的表达式确保所指定的匹配只匹配章节而不会匹配交叉引用。它是通过创建一个只匹配一行文字的开始和结束位置的正则表达式来实现的。

/^Chapter [1-9][0-9]{0,1}$/

对 VBScript 则使用：

"^Chapter [1-9][0-9]{0,1}$"

匹配单词边界有少许不同，但却给正则表达式增加了一个非常重要的功能。单词边界就是单词和空格之间的位置。非单词边界就是其他任何位置。下面的 JScript 表达式将匹配单词 'Chapter' 的前三个字符，因为它们出现在单词边界后：

/\bCha/

对 VBScript 为：

"\bCha"

这里 '\b' 操作符的位置很关键。如果它位于要匹配的字符串的开始，则将查找位于单词开头处的匹配；如果它位于改字符串的末尾，则查找位于单词结束处的匹配。例如，下面的表达式将匹配单词 'Chapter' 中的 'ter'，因为它出现在单词边界之前：

/ter\b/

以及

"ter\b"

下面的表达式将匹配 'apt'，因为它位于 'Chapter' 中间，但不会匹配 'aptitude' 中的'apt'：

/\Bapt/

以及

"\Bapt"

这是因为在单词 'Chapter' 中 'apt' 出现在非单词边界位置，而在单词 'aptitude' 中位于单词边界位置。非单词边界操作符的位置不重要，因为匹配与一个单词的开头或结尾无关。


选择与编组

选择允许使用 '|' 字符来在两个或多个候选项中进行选择。通过扩展章节标题的正则表达式，可以将其扩充为不仅仅适用于章节标题的表达式。不过，这可没有想象的那么直接。在使用选择时，将匹配'|' 字符每边最可能的表达式。你可能认为下面的 JScript 和 VBScript 表达式将匹配位于一行的开始和结束位置且后跟一个或两个数字的 'Chapter' 或 'Section'：

/^Chapter|Section [1-9][0-9]{0,1}$/
"^Chapter|Section [1-9][0-9]{0,1}$"

不幸的是，真正的情况是上面所示的正则表达式要么匹配位于一行开始处的单词 'Chapter'，要么匹配一行结束处的后跟任何数字的 'Section'。如果输入字符串为 'Chapter 22'，上面的表达式将只匹配单词 'Chapter'。如果输入字符串为 'Section 22'，则该表达式将匹配 'Section 22'。但这种结果不是我们此处的目的，因此必须有一种办法来使正则表达式对于所要做的更易于响应，而且确实也有这种方法。

可以使用圆括号来限制选择的范围，也就是说明确该选择只适用于这两个单词 'Chapter' 和 'Section'。不过，圆括号同样也是难处理的，因为它们也用来创建子表达式，有些内容将在后面关于子表达式的部分介绍。通过采用上面所示的正则表达式并在适当位置添加圆括号，就可以使该正则表达式既可以匹配 'Chapter 1'，也可以匹配 'Section 3'。

下面的正则表达式使用圆括号将 'Chapter' 和 'Section' 组成一组，所以该表达式才能正确工作。对 JScript 为：

/^(Chapter|Section) [1-9][0-9]{0,1}$/

对 VBScript 为：

"^(Chapter|Section) [1-9][0-9]{0,1}$"

这些表达式工作正确，只是产生了一个有趣的副产品。在 'Chapter|Section' 两边放置圆括号建立了适当的编组，但也导致两个待匹配单词之一都被捕获供今后使用。由于在上面所示的表达式中只有一组圆括号，因此只能有一个捕获的 submatch。可以使用 VBScript 的Submatches 集合或者JScript 中RegExp 对象的 $1-$9 属性来引用这个子匹配。

有时捕获一个子匹配是所希望的，有时则是不希望的。在说明所示的示例中，真正想做的就是使用圆括号对单词 'Chapter' 或 'Section' 之间的选择编组。并不希望在后面再引用该匹配。实际上，除非真的是需要捕获子匹配，否则请不要使用。由于不需要花时间和内存来存储那些子匹配，这种正则表达式的效率将更高。

可以在正则表达式模式圆括号内部的前面使用 '?:'来防止存储该匹配供今后使用。对上面所示正则表达式的下述修改提供了免除子匹配存储的相同功能。对 JScript：

/^(?:Chapter|Section) [1-9][0-9]{0,1}$/

对 VBScript：

"^(?:Chapter|Section) [1-9][0-9]{0,1}$"

除了 '?:' 元字符，还有两个非捕获元字符用于称之为预查的匹配。一个为正向预查，用 ?= 表示， 在任何开始匹配圆括号内的正则表达式模式的位置来匹配搜索字符串。一个为负向预查，用 '?!' 表示，在任何开始不匹配该正则表达式模式的位置来匹配搜索字符串。

例如，假定有一个包含引用有 Windows 3.1、Windows 95、Windows 98 以及 Windows NT 的文档。进一步假设需要更新该文档，方法是查找所有对 Windows 95、Windows 98 以及 Windows NT 的引用，并将这些引用更改为 Windows 2000。可以使用下面的 JScript 正则表达式，这是一个正向预查，来匹配 Windows 95、Windows 98 以及 Windows NT：

/Windows(?=95 |98 |NT )/

在 VBScript 要进行同样的匹配可以使用下述表达式：

"Windows(?=95 |98 |NT )"

找到一个匹配后，紧接匹配到的文字（而不包括预查中使用的字符）就开始对下一次匹配的搜索。例如，如果上面所示的表达式匹配到 'Windows 98'，则将从 'Windows' 而不是 '98' 之后继续查找。


后向引用

JScript 和 VBScript 正则表达式

向后引用

正则表达式一个最重要的特性就是将匹配成功的模式的某部分进行存储供以后使用这一能力。请回想一下，对一个正则表达式模式或部分模式两边添加圆括号将导致这部分表达式存储到一个临时缓冲区中。可以使用非捕获元字符 '?:', '?=', or '?!' 来忽略对这部分正则表达式的保存。

所捕获的每个子匹配都按照在正则表达式模式中从左至右所遇到的内容存储。存储子匹配的缓冲区编号从 1 开始，连续编号直至最大 99 个子表达式。每个缓冲区都可以使用 '\n' 访问，其中 n 为一个标识特定缓冲区的一位或两位十进制数。

向后引用一个最简单，最有用的应用是提供了确定文字中连续出现两个相同单词的位置的能力。请看下面的句子：

Is is the cost of of gasoline going up up?

根据所写内容，上面的句子明显存在单词多次重复的问题。如果能有一种方法无需查找每个单词的重复现象就能修改该句子就好了。下面的 JScript 正则表达式使用一个子表达式就可以实现这一功能。

/\b([a-z]+) \1\b/gi

等价的 VBScript 表达式为：

"\b([a-z]+) \1\b"

在这个示例中，子表达式就是圆括号之间的每一项。所捕获的表达式包括一个或多个字母字符，即由'[a-z]+' 所指定的。该正则表达式的第二部分是对前面所捕获的子匹配的引用，也就是由附加表达式所匹配的第二次出现的单词。'\1'用来指定第一个子匹配。单词边界元字符确保只检测单独的单词。如果不这样，则诸如 "is issued" 或 "this is" 这样的短语都会被该表达式不正确地识别。

在 JScript 表达式中，正则表达式后面的全局标志 ('g') 表示该表达式将用来在输入字符串中查找尽可能多的匹配。大小写敏感性由表达式结束处的大小写敏感性标记 ('i') 指定。多行标记指定可能出现在换行符的两端的潜在匹配。对 VBScript 而言，在表达式中不能设置各种标记，但必须使用 RegExp 对象的属性来显式设置。

使用上面所示的正则表达式，下面的 JScript 代码可以使用子匹配信息，在一个文字字符串中将连续出现两次的相同单词替换为一个相同的单词：

var ss = "Is is the cost of of gasoline going up up?.\n";
var re = /\b([a-z]+) \1\b/gim;       //创建正则表达式样式。
var rv = ss.replace(re,"$1");   //用一个单词替代两个单词。

最接近的等价 VBScript 代码如下：

Dim ss, re, rv
ss = "Is is the cost of of gasoline going up up?." & vbNewLine
Set re = New RegExp
re.Pattern = "\b([a-z]+) \1\b"
re.Global = True
re.IgnoreCase = True
re.MultiLine = True
rv = re.Replace(ss,"$1")

请注意在 VBScript 代码中，全局、大小写敏感性以及多行标记都是使用 RegExp 对象的适当属性来设置的。

在replace 方法中使用 $1 来引用所保存的第一个子匹配。如果有多个子匹配，则可以用 $2, $3 等继续引用。

向后引用的另一个用途是将一个通用资源指示符 (URI) 分解为组件部分。假定希望将下述的URI 分解为协议 (ftp, http, etc)，域名地址以及页面/路径：

http://msdn.microsoft.com:80/scripting/default.htm

下面的正则表达式可以提供这个功能。对 JScript，为：

/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/

对 VBScript 为：

"(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)"

第一个附加子表达式是用来捕获该 web 地址的协议部分。该子表达式匹配位于一个冒号和两个正斜杠之前的任何单词。第二个附加子表达式捕获该地址的域名地址。该子表达式匹配不包括 '^'、 '/' 或 ':' 字符的任何字符序列。第三个附加子表达式捕获网站端口号码，如果指定了该端口号。该子表达式匹配后跟一个冒号的零或多个数字。最后，第四个附加子表达式捕获由该 web 地址指定的路径以及\或者页面信息。该子表达式匹配一个和多个除'#' 或空格之外的字符。

将该正则表达式应用于上面所示的 URI 后，子匹配包含下述内容：

  • RegExp.$1 包含 "http"
  • RegExp.$2 包含 "msdn.microsoft.com"
  • RegExp.$3 包含 ":80"
  • RegExp.$4 包含 "/scripting/default.htm"


VBScript 语言参考

常数

错误

事件

函数

方法

杂项

对象和集合

运算符

属性

语句


版本信息 (VBScript)

Visual Basic Scripting Edition

版本信息

下表列举了宿主应用程序所执行的 Visual Basic Scripting Edition 版本信息。

宿主应用程序 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 | 5.5 | 5.6
Microsoft Internet Explorer 3.0 | x |  |  |  |  |  |
Microsoft Internet Information Server 3.0 |  | x |  |  |  |  |
Microsoft Internet Explorer 4.0 |  |  | x |  |  |  |
Microsoft Internet Information Server 4.0 |  |  | x |  |  |  |
Microsoft Windows Scripting Host 1.0 |  |  | x |  |  |  |
Microsoft Outlook 98 |  |  | x |  |  |  |
Microsoft Visual Studio 6.0 |  |  |  | x |  |  |
Microsoft Internet Explorer 5.0 |  |  |  |  | x |  |
Microsoft Internet Information Services 5.0 |  |  |  |  | x |  |
Microsoft Internet Explorer 5.5 |  |  |  |  |  | x |
Microsoft Visual Studio.NET |  |  |  |  |  |  | x

下表列举了 VBScript 语言特征首次引用时的版本信息。

语言元素 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 | 5.5 | 5.6
Abs 函数 | x |  |  |  |  |  |
加法运算符 (+) | x |  |  |  |  |  |
And 运算符 | x |  |  |  |  |  |
Array 函数 |  | x |  |  |  |  |
Asc 函数 | x |  |  |  |  |  |
赋值运算符 (=) | x |  |  |  |  |  |
Atn 函数 | x |  |  |  |  |  |
Call 语句 | x |  |  |  |  |  |
CBool 函数 | x |  |  |  |  |  |
CByte 函数 | x |  |  |  |  |  |
CCur 函数 | x |  |  |  |  |  |
CDate 函数 | x |  |  |  |  |  |
CDbl 函数 | x |  |  |  |  |  |
Chr 函数 | x |  |  |  |  |  |
CInt 函数 | x |  |  |  |  |  |
Class 对象 |  |  |  |  | x |  |
Class 语句 |  |  |  |  | x |  |
Clear 方法 | x |  |  |  |  |  |
CLng 函数 | x |  |  |  |  |  |
Color 常数 |  | x |  |  |  |  |
Comparison 常数 |  | x |  |  |  |  |
字符串连接运算符 (&) | x |  |  |  |  |  |
Const 语句 |  | x |  |  |  |  |
Cos 函数 | x |  |  |  |  |  |
CreateObject 函数 |  | x |  |  |  |  |
CSng 函数 | x |  |  |  |  |  |
CStr 函数 | x |  |  |  |  |  |
Date 和 Time 常数 |  | x |  |  |  |  |
Date Format 常数 |  | x |  |  |  |  |
Date 函数 | x |  |  |  |  |  |
DateAdd 函数 |  | x |  |  |  |  |
DateDiff 函数 |  | x |  |  |  |  |
DatePart 函数 |  | x |  |  |  |  |
DateSerial 函数 | x |  |  |  |  |  |
DateValue 函数 | x |  |  |  |  |  |
Day 函数 | x |  |  |  |  |  |
Description 属性 | x |  |  |  |  |  |
Dim 语句 | x |  |  |  |  |  |
除法运算符 (/) | x |  |  |  |  |  |
Do...Loop 语句 | x |  |  |  |  |  |
Empty | x |  |  |  |  |  |
Eqv 运算符 | x |  |  |  |  |  |
Erase 语句 | x |  |  |  |  |  |
Err 对象 | x |  |  |  |  |  |
Eval 函数 |  |  |  |  | x |  |
Execute 方法 |  |  |  |  | x |  |
Execute 语句 |  |  |  |  | x |  |
ExecuteGlobal 语句 |  |  |  |  | x |  |
Exit 语句 | x |  |  |  |  |  |
Exp 函数 | x |  |  |  |  |  |
幂运算符 (^) | x |  |  |  |  |  |
False | x |  |  |  |  |  |
Filter 函数 |  | x |  |  |  |  |
FirstIndex 属性 |  |  |  |  | x |  |
Fix 函数 | x |  |  |  |  |  |
For...Next 语句 | x |  |  |  |  |  |
For Each...Next 语句 |  | x |  |  |  |  |
FormatCurrency 函数 |  | x |  |  |  |  |
FormatDateTime 函数 |  | x |  |  |  |  |
FormatNumber 函数 |  | x |  |  |  |  |
FormatPercent 函数 |  | x |  |  |  |  |
Function 语句 | x |  |  |  |  |  |
GetLocale 函数 |  |  |  |  | x |  |
GetObject 函数 |  | x |  |  |  |  |
GetRef 函数 |  |  |  |  | x |  |
Global 属性 |  |  |  |  | x |  |
Hex 函数 | x |  |  |  |  |  |
HelpContext 属性 |  | x |  |  |  |  |
HelpFile 属性 |  | x |  |  |  |  |
Hour 函数 | x |  |  |  |  |  |
If...Then...Else 语句 | x |  |  |  |  |  |
IgnoreCase 属性 |  |  |  |  | x |  |
Imp 运算符 | x |  |  |  |  |  |
Initialize 事件 |  |  |  |  | x |  |
InputBox 函数 | x |  |  |  |  |  |
InStr 函数 | x |  |  |  |  |  |
InStrRev 函数 |  | x |  |  |  |  |
Int 函数 | x |  |  |  |  |  |
整除运算符 (\) | x |  |  |  |  |  |
Is 运算符 | x |  |  |  |  |  |
IsArray 函数 | x |  |  |  |  |  |
IsDate 函数 | x |  |  |  |  |  |
IsEmpty 函数 | x |  |  |  |  |  |
IsNull 函数 | x |  |  |  |  |  |
IsNumeric 函数 | x |  |  |  |  |  |
IsObject 函数 | x |  |  |  |  |  |
Join 函数 |  | x |  |  |  |  |
LBound 函数 | x |  |  |  |  |  |
LCase 函数 | x |  |  |  |  |  |
Left 函数 | x |  |  |  |  |  |
Len 函数 | x |  |  |  |  |  |
Length 属性 |  |  |  |  | x |  |
LoadPicture 函数 |  | x |  |  |  |  |
Log 函数 | x |  |  |  |  |  |
LTrim 函数 | x |  |  |  |  |  |
Match 对象 |  |  |  |  | x |  |
Matches 集合 |  |  |  |  | x |  |
Mid 函数 | x |  |  |  |  |  |
Minute 函数 | x |  |  |  |  |  |
Miscellaneous 常数 |  | x |  |  |  |  |
求余运算符 | x |  |  |  |  |  |
Month 函数 | x |  |  |  |  |  |
MonthName 函数 |  | x |  |  |  |  |
MsgBox 常数 |  | x |  |  |  |  |
MsgBox 函数 | x |  |  |  |  |  |
乘法运算符 (*) | x |  |  |  |  |  |
减法运算符 (-) | x |  |  |  |  |  |
Not 运算符 | x |  |  |  |  |  |
Now 函数 | x |  |  |  |  |  |
Nothing | x |  |  |  |  |  |
Null | x |  |  |  |  |  |
Number 属性 | x |  |  |  |  |  |
Oct 函数 | x |  |  |  |  |  |
On Error 语句 | x |  |  |  |  |  |
Option Explicit 语句 | x |  |  |  |  |  |
Or 运算符 | x |  |  |  |  |  |
Pattern 属性 |  |  |  |  | x |  |
Private 语句 |  | x |  |  |  |  |
PropertyGet 语句 |  |  |  |  | x |  |
PropertyLet 语句 |  |  |  |  | x |  |
PropertySet 语句 |  |  |  |  | x |  |
Public 语句 |  | x |  |  |  |  |
Raise 方法 | x |  |  |  |  |  |
Randomize 语句 | x |  |  |  |  |  |
ReDim 语句 | x |  |  |  |  |  |
RegExp 对象 |  |  |  |  | x |  |
Rem 语句 | x |  |  |  |  |  |
Replace 函数 |  | x |  |  |  |  |
Replace 方法 |  |  |  |  | x |  |
RGB 函数 |  | x |  |  |  |  |
Right 函数 | x |  |  |  |  |  |
Rnd 函数 | x |  |  |  |  |  |
Round 函数 |  | x |  |  |  |  |
RTrim 函数 | x |  |  |  |  |  |
ScriptEngine 函数 |  | x |  |  |  |  |
ScriptEngineBuildVersion 函数 |  | x |  |  |  |  |
ScriptEngineMajorVersion 函数 |  | x |  |  |  |  |
ScriptEngineMinorVersion 函数 |  | x |  |  |  |  |
Second 函数 | x |  |  |  |  |  |
Select Case 语句 | x |  |  |  |  |  |
Set 语句 | x |  |  |  |  |  |
SetLocale 函数 |  |  |  |  | x |  |
Sgn 函数 | x |  |  |  |  |  |
Sin 函数 | x |  |  |  |  |  |
Source 属性 | x |  |  |  |  |  |
Space 函数 | x |  |  |  |  |  |
Split 函数 |  | x |  |  |  |  |
Sqr 函数 | x |  |  |  |  |  |
StrComp 函数 | x |  |  |  |  |  |
String 常数 |  | x |  |  |  |  |
String 函数 | x |  |  |  |  |  |
StrReverse 函数 |  | x |  |  |  |  |
Sub 语句 | x |  |  |  |  |  |
减法运算符 (-) | x |  |  |  |  |  |
Tan 函数 | x |  |  |  |  |  |
Terminate 事件 |  |  |  |  | x |  |
Test 方法 |  |  |  |  | x |  |
Time 函数 | x |  |  |  |  |  |
Timer 函数 |  |  |  |  | x |  |
TimeSerial 函数 | x |  |  |  |  |  |
TimeValue 函数 | x |  |  |  |  |  |
Trim 函数 | x |  |  |  |  |  |
三态常数 |  | x |  |  |  |  |
True | x |  |  |  |  |  |
TypeName 函数 |  | x |  |  |  |  |
UBound 函数 | x |  |  |  |  |  |
UCase 函数 | x |  |  |  |  |  |
Value 属性 |  |  |  |  | x |  |
VarType 常数 |  | x |  |  |  |  |
VarType 函数 | x |  |  |  |  |  |
VBScript 常数 |  | x |  |  |  |  |
Weekday 函数 | x |  |  |  |  |  |
WeekdayName 函数 |  | x |  |  |  |  |
While...Wend 语句 | x |  |  |  |  |  |
With 语句 |  |  |  |  | x |  |
Xor 运算符 | x |  |  |  |  |  |
Year 函数 | x |  |  |  |  |  |


VBScript 常数

VBScript 中设置了一些可以在程序代码中使用的有益常数。常数的便利在于直接使用特定的数值但不需要记住具体的值。如果某些常数的数值可能改变，则使用常数将有助于提高程序的可维护性。由于这些常数已经在 VBScript 中得到定义，在程序代码中不需要显式地声明它们，在需要的地方直接使用它们就可以了。

下面是 VBScript 中提供的常数类型，以及对每种类型的简短描述：

  • 颜色常数定义了脚本中可以使用的 8 种基本颜色。
  • 日期与时间常数定义了被各种日期与时间函数使用的日期与时间常数。
  • 日期格式常数定义了用于规定日期和时间格式的常数。
  • 其他常数定义了比较难以归类的常数。
  • MsgBox 常数定义了在 MsgBox 函数中使用的常数，用来描述按钮的可见与否、标签、行为和返回值。
  • 字符串常数定义在字符串操作中可以使用的各种不可打印字符。
  • 三态常数定义了被规定数字格式的函数使用的常数。
  • VarType 常数定义了各种 Variant 子类型。

要求

版本 2


颜色常数

因为这些常数是在 VBScript中设置, 您在应用之前不必定义它们. 您可在代码中任意处应用它们以表明说明值。

常数 | 值 | 描述
vbBlack | &h00 | 黑色
vbRed | &hFF | 红色
vbGreen | &hFF00 | 绿色
vbYellow | &hFFFF | 黄色
vbBlue | &hFF0000 | 蓝色
vbMagenta | &hFF00FF | 紫色
vbCyan | &hFFFF00 | 青色
vbWhite | &hFFFFFF | 白色

要求

版本 2

请参阅

比较常数 | 日期和时间常数 | 日期格式常数 | 其他常数 | MsgBox 常数 | 字符串常数 | 三态常数 | VarType 常数


比较常数

这些常数在 VBScript 中建立, 因此您在使用时不必定义它们. 您可在代码中任意处使用它们以表示说明值.

常数 | 值 | 描述
vbBinaryCompare | 0 | 执行二进制比较。
vbTextCompare | 1 | 执行文本比较。

要求

版本 2

请参阅

颜色常数 | 日期和时间常数 | 日期格式常数 | 其他常数 | MsgBox 常数 | 字符串常数 | 三态常数 | VarType 常数


日期和时间常数

因为这些常数在 VBScript 被建立, 您在使用它们之前不必定义. 您可在代码中任意处使用它们以表示说明值.

常数 | 值 | 描述
vbSunday | 1 | 星期日
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六
vbUseSystemDayOfWeek | 0 | 由系统设置定义每周的第一天是星期几。
vbFirstJan1 | 1 | 使用包含 1 月 1 日的星期（默认）。
vbFirstFourDays | 2 | 使用第一个至少包含新的年中四天的星期。
vbFirstFullWeek | 3 | 使用某年的第一个整周。

要求

版本 2

请参阅

颜色常数 | 比较常数 | 日期格式常数 | 其他常数 | MsgBox 常数 | 字符串常数 | 三态常数 | VarType 常数


日期格式常数

因为这些常数在 VBScript 中被建立, 您在应用之前不必定义它们. 您可在代码中任意处使用它们以表示说明值.

常数 | 值 | 描述
vbGeneralDate | 0 | 显示日期和/或时间。对于实数，显示日期和时间。如果没有小数部分，仅显示日期。如果没有整数部分，则仅显示时间。由系统设置决定日期和时间的显示。
vbLongDate | 1 | 按计算机中区域设置指定的长日期格式显示日期。
vbShortDate | 2 | 按计算机中区域设置指定的短日期格式显示日期。
vbLongTime | 3 | 按计算机中区域设置指定的长时间格式显示时间。
vbShortTime | 4 | 按计算机中区域设置指定的短时间格式显示时间。

要求

版本 2

请参阅

颜色常数 | 比较常数 | 日期和时间常数 | 其他常数 | MsgBox 常数 | 字符串常数 | 三态常数 | VarType 常数


其他常数

因为此常数在 VBScript中被建立, 您在使用之前不必定义它. 您可在代码中任意处使用它来表示说明值.

常数 值 描述
vbObjectError -2147221504 自定义错误号应大于该值，例如，
Err.Raise Number = vbObjectError + 1000

要求

版本 2

请参阅

颜色常数 | 比较常数 | 日期和时间常数 | 日期格式常数 | MsgBox 常数 | 字符串常数 | 三态常数 | VarType 常数


MsgBox 常数

下列常数与 MsgBox 函数一起使用，标识在消息框中出现的按钮、图标，并指定默认按钮。另外，还可以指定消息框的样式。因为这些常数在VBScript中被建立，您在使用之前不必定义它们。您可在代码中任意处使用它们以表示说明值。

常数 | 值 | 描述
vbOKOnly | 0 | 只显示“确定”按钮。
vbOKCancel | 1 | 显示“确定”和“取消”按钮。
vbAbortRetryIgnore | 2 | 显示“终止”、“重试”和“忽略”按钮。
vbYesNoCancel | 3 | 显示“是”、“否”和“取消”按钮。
vbYesNo | 4 | 显示“是”和“否”按钮。
vbRetryCancel | 5 | 显示“重试”和“取消”按钮。
vbCritical | 16 | 显示“临界消息”图标。
vbQuestion | 32 | 显示“警告询问”图标。
vbExclamation | 48 | 显示“警告消息”图标。
vbInformation | 64 | 显示“提示消息”图标。
vbDefaultButton1 | 0 | 第一个按钮是默认按钮。
vbDefaultButton2 | 256 | 第二个按钮是默认按钮。
vbDefaultButton3 | 512 | 第三个按钮是默认按钮。
vbDefaultButton4 | 768 | 第四个按钮是默认按钮。
vbApplicationModal | 0 | 应用程序模式。用户必须响应消息框，才能继续在当前应用程序中工作。
vbSystemModal | 4096 | 系统模式。在 Win16 系统中， 所有应用程序都将中止直到用户响应消息框。在 Win32 系统中， 此常数提供一个应用程序模式信息框并总是保留在您可能正在运行的所有其它程序的顶部。

下列常数与 MsgBox 函数一起使用，标识用户选定的按钮。仅当类型库中包含以下常数定义，且在您的工程文件中已经显式引用该类型库后，才允许使用这些常数。对于 VBScript，必须在代码中显式声明这些常数。

常数 | 值 | 描述
vbOK | 1 | “确定”按钮被单击。
vbCancel | 2 | “取消”按钮被单击。
vbAbort | 3 | “终止”按钮被单击。
vbRetry | 4 | “重试”按钮被单击。
vbIgnore | 5 | “忽略”按钮被单击。
vbYes | 6 | “是”按钮被单击。
vbNo | 7 | “否”按钮被单击。

要求

版本 2

请参阅

颜色常数 | 比较常数 | 日期和时间常数 | 日期格式常数 | 其他常数 | 字符串常数 | 三态常数 | VarType 常数


字符串常数

因为这些常数在 VBScript中被建立， 您在使用之前不必定义它们。您可在代码中任意处使用它们以表示说明值。

常数 | 值 | 描述
vbCr | Chr(13) | 回车符。
vbCrLf | Chr(13) & Chr(10) | 回车符与换行符。
vbFormFeed | Chr(12) | 换页符；在 Microsoft Windows 中不适用。
vbLf | Chr(10) | 换行符。
vbNewLine | Chr(13) & Chr(10) 或 Chr(10) | 平台指定的新行字符；适用于任何平台。
vbNullChar | Chr(0) | 值为 0 的字符。
vbNullString | 值为 0 的字符串 | 与零长度字符串 ("") 不同；用于调用外部过程。
vbTab | Chr(9) | 水平附签。
vbVerticalTab | Chr(11) | 垂直附签；在 Microsoft Windows 中不适用。

要求

版本 2

请参阅

颜色常数 | 比较常数 | 日期和时间常数 | 日期格式常数 | 其他常数 | MsgBox 常数 | 三态常数 | VarType 常数


三态常数

这些常数在VBScript中被建立，因此您在使用之前不必定义它们。您可在代码中任意处使用它们表示说明值。

常数 | 值 | 描述
vbUseDefault | -2 | 使用来自计算机最初设置中的默认值。
vbTrue | -1 | True
vbFalse | 0 | False

要求

版本 2

请参阅

颜色常数 | 比较常数 | 日期和时间常数 | 日期格式常数 | 其他常数 | MsgBox常数 | 字符串常数 | VarType 常数


VarType 常数

仅当类型库包含以下常数定义，且在您的工程文件中已经显式引用该类型库后，才允许使用这些常数。对于 VBScript，必须在代码中显式声明这些常数。

常数 | 值 | 描述
vbEmpty | 0 | 未初始化（默认）
vbNull | 1 | 不包含任何有效数据
vbInteger | 2 | 整型子类型
vbLong | 3 | 长整型子类型
vbSingle | 4 | 单精度子类型
vbDouble | 5 | 双精度子类型
vbCurrency | 6 | 货币子类型
vbDate | 7 | 日期子类型
vbString | 8 | 字符串子类型
vbObject | 9 | 对象
vbError | 10 | 错误子类型
vbBoolean | 11 | Boolean 子类型
vbVariant | 12 | Variant （仅用于变量数组）
vbDataObject | 13 | 数据访问对象
vbDecimal | 14 | 十进制子类型
vbByte | 17 | 字节子类型
vbArray | 8192 | 数组

要求

版本 2

请参阅

颜色常数 | 比较常数 | 日期和时间常数 | 日期格式常数 | 其他常数 | MsgBox常数 | 字符串常数 | 三态常数


错误

本节内容

VBScript 运行时错误

VBScript 语法错误

相关章节

VBScript 语言参考


VBScript 运行时错误

如果 VBScript 脚本执行系统无法实施的操作，则会产生 VBScript 运行时错误。只有在运行脚本、为变量表达式赋值或分配内存时，才会产生 VBScript 运行时错误。

错误编号 | 描述
429 | ActiveX 部件无法创建对象
507 | 发生异常
449 | 参数不可选
17 | 无法执行请求的操作
430 | 类不支持自动化
506 | 类未定义
11 | 被零除
48 | 加载 DLL 错误
5020 | 在正则表达式中需要 ')'
5019 | 在正则表达式中需要 ']'
432 | 在自动化操作中未找到文件名或类名
92 | For 循环未初始化
5008 | 非法赋值
51 | 内部错误
505 | 无效的或不合格的引用
481 | 无效图片
5 | 无效过程调用或参数
5021 | 字符集越界
94 | 非法使用 Null
448 | 未找到命名参数
447 | 对象不支持当前的区域设置
445 | 对象不支持此操作
438 | 对象不支持该属性或方法
451 | 对象不是一个集合
504 | 对象不能安全创建
503 | 对象不能安全初始化
502 | 脚本对象不安全
424 | 需要对象
91 | 未设置对象变量
7 | 内存不足
28 | 堆栈溢出
14 | 字符串空间溢出
6 | 溢出
35 | 未定义 Sub 或 Function
9 | 下标越界
5017 | 正则表达式中的语法错误
462 | 远程服务器不存在或不能访问
10 | 该数组为定长的或临时被锁定
13 | 类型不匹配
5018 | 未预期的限定符
500 | 变量未定义
458 | 变量使用了 VBScript 不支持的自动化类型
450 | 错误的参数个数或无效的参数属性值

请参阅

VBScript 语法错误


VBScript 语法错误

如果 VBScript 语句结构违反了一个或多个 VBScript 脚本语言语法规则，就会产生 VBScript 语法错误。VBScript 语法错误通常在执行程序前，编译程序时产生。

错误编号 | 描述
1052 | 在类中不能有多个缺省的属性/方法
1044 | 调用 Sub 时不能使用圆括号
1053 | 类初始化或终止不能带参数
1058 | 只能在 Property Get 中指定 'Default'
1057 | 说明 'Default' 必须同时说明 'Public' "
1005 | 需要 '('
1006 | 需要 ')'
1011 | 需要 '='
1021 | 需要 'Case'
1047 | 需要 'Class'
1025 | 需要语句的结束
1014 | 需要 'End'
1023 | 需要表达式
1015 | 需要 'Function'
1010 | 需要标识符
1012 | 需要 'If'
1046 | 需要 'In'
1026 | 需要整数常数
1049 | 在属性声明中需要 Let、Set 或 Get
1045 | 需要文字常数
1019 | 需要 'Loop'
1020 | 需要 'Next'
1050 | 需要 'Property'
1022 | 需要 'Select'
1024 | 需要语句
1016 | 需要 'Sub'
1017 | 需要 'Then'
1013 | 需要 'To'
1018 | 需要 'Wend'
1027 | 需要 'While' 或 'Until'
1028 | 需要 'While'、'Until' 或语句的结束
1029 | 需要 'With'
1030 | 标识符太长
1014 | 无效字符
1039 | 无效 'exit' 语句
1040 | 无效 'for' 循环控制变量
1013 | 无效数字
1037 | 无效使用关键字 'Me'
1038 | 'loop' 没有 'do'
1048 | 必须在一个类的内部定义
1042 | 必须为行的第一个语句
1041 | 名称重定义
1051 | 参数数目必须与属性说明一致
1001 | 内存不足
1054 | Property Let 或 Set 至少应该有一个参数
1002 | 语法错误
1055 | 不需要 'Next'
1015 | 未终止字符串常数

请参阅

VBScript 运行时错误


事件 (VBScript)

Visual Basic Scripting Edition

事件

本节内容

Initialize 事件

Terminate 事件

相关章节

VBScript 语言参考


Initialize 事件

在创建类的实例时发生此事件。

Private Sub Class_Initialize()
    语句
End Sub

当类初始化时，statements部分由零个或多个将要运行的代码语句组成。

说明

下面的例子演示了 Initialize 事件的用法。

Class TestClass
   Private Sub Class_Initialize   ' 设置 Initialize 事件。
      MsgBox("TestClass started")
   End Sub
   Private Sub Class_Terminate   ' 设置 Terminate 事件。
      MsgBox("TestClass terminated")
   End Sub
End Class

Set X = New TestClass   ' 创建一个 TestClass 实例。
Set X = Nothing   ' 破坏实例。

要求

版本 5

请参阅

Class 对象 | Class 语句 | Terminate 事件

应用于：Class 对象


Terminate 事件

在所关联的类的实例终止时发生此事件。

Private Sub Class_Terminate()
    语句
End Sub

当类初始化时，statements 部分由零个或多个将要运行的代码语句组成。

说明

下面的例子演示了 Terminate 事件的用法。

Class TestClass
   Private Sub Class_Initialize   ' 设置 Initialize 事件。
      MsgBox("TestClass started")
   End Sub
   Private Sub Class_Terminate   ' 设置 Terminate 事件。
      MsgBox("TestClass terminated")
   End Sub
End Class
Set X = New TestClass   ' 创建一个 TestClass 实例。
Set X = Nothing   ' 删除实例。

要求

版本 5

请参阅

Class 对象 | Class 语句 | Initialize 事件

应用于：Class 对象


函数

下表列出了 VBScript 函数。

Abs | Array | Asc | Atn
CBool | CByte | CCur | CDate
CDbl | Chr | CInt | CLng
Conversions | Cos | CreateObject | CSng
Date | DateAdd | DateDiff | DatePart
DateSerial | DateValue | Day | Derived Maths
Eval | Exp | Filter | FormatCurrency
FormatDateTime | FormatNumber | FormatPercent | GetLocale
GetObject | GetRef | Hex | Hour
InputBox | InStr | InStrRev | Int, Fixs
IsArray | IsDate | IsEmpty | IsNull
IsNumeric | IsObject | Join | LBound
LCase | Left | Len | LoadPicture
Log | LTrim; RTrim; and Trims | Maths | Mid
Minute | Month | MonthName | MsgBox
Now | Oct | Replace | RGB
Right | Rnd | Round | ScriptEngine
ScriptEngineBuildVersion | ScriptEngineMajorVersion | ScriptEngineMinorVersion | Second
SetLocale | Sgn | Sin | Space
Split | Sqr | StrComp | String
Tan | Time | Timer | TimeSerial
TimeValue | TypeName | UBound | UCase
VarType | Weekday | WeekdayName | Year

相关章节

VBScript 语言参考


Abs 函数

返回数字的绝对值。

Abs(number)

number 参数可以是任意有效的数值表达式。如果 number 包含 Null，则返回 Null；如果是未初始化变量，则返回 0。

说明

数字的绝对值是其无符号的数值大小。例如，Abs(-1) 和 Abs(1) 都返回 1。

下面示例利用 Abs 函数计算数字的绝对值：

Dim MyNumber
MyNumber = Abs(50.3 )      '返回 50.3。
MyNumber = Abs(-50.3)      '返回 50.3。

要求

版本1

请参阅

Sgn 函数


Array 函数

返回包含数组的 Variant。

Array(arglist)

arglist 参数是赋给包含在 Variant 中的数组元素的值的列表（用逗号分隔）。如果没有指定此参数，则将会创建零长度的数组。

说明

用于引用数组元素的表示符，由跟随有括号的变量名组成，括号中包含指示所需元素的索引号。在下面的示例中，第一条语句创建名为 A 的变量。第二条语句将一个数组赋值给变量 A。最后一条语句将包含在第二个数组元素中的值赋值给另一个变量。

Dim A
A = Array(10,20,30)
B = A(2)   ' B 现在为 30。
注意 未作为数组声明的变量仍可以包含数组。虽然包含数组的 Variant 变量与包含 Variant 元素的数组变量有概念上的不同，但访问数组元素的方法是相同的。

要求

版本2

请参阅

Dim 语句


Asc 函数

返回与字符串的第一个字母对应的 ANSI 字符代码。

Asc(string)

string 参数是任意有效的字符串表达式。如果 string 参数未包含字符，则将发生运行时错误。

说明

下面例子中, Asc 返回每一个字符串首字母的 ANSI 字符代码:

Dim MyNumber
MyNumber = Asc("A")      '返回 65。
MyNumber = Asc("a")      '返回 97。
MyNumber = Asc("Apple")  '返回 65。
注意 AscB 函数和包含字节数据的字符串一起使用。AscB 不是返回第一个字符的字符代码，而是返回首字节。AscW 是为使用 Unicode 字符的 32 位平台提供的。它返回 Unicode （宽型）字符代码，因此可以避免从 ANSI 到 Unicode 的代码转换。

要求

版本1

请参阅

Chr 函数


Atn 函数

返回数值的反正切值。

Atn(number)

number 参数可以是任意有效的数值表达式。

说明

Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧度值。此比值是该角对边的长度与邻边长度之比。结果的范围是从 -pi/2 到 pi/2 弧度。

弧度变换为角度的方法是将弧度乘以 pi/180。反之，角度变换为弧度的方法是将角度乘以180/pi 。

下面的示例利用 Atn 来计算 pi 的值:

Dim pi
pi = 4 * Atn(1)   ' 计算 pi 的值。
注意 Atn 是 Tan（将角作为参数返回直角三角形两边的比值）的反三角函数。不要混淆 Atn 与余切（正切的倒数 (1/tangent)）函数。

要求

版本1

请参阅

Cos 函数 | 派生数学函数 | Sin 函数 | Tan 函数


CBool 函数

返回表达式，此表达式已转换为 Boolean 子类型的 Variant。

CBool(expression)

expression 是任意有效的表达式。

说明

如果 expression 是零，则返回 False；否则返回 True。如果 expression 不能解释为数值，则将发生运行时错误。

下面的示例使用 CBool 函数将一个表达式转变成 Boolean 类型。如果表达式所计算的值非零，则 CBool 函数返回 True；否则返回 False。

Dim A, B, Check
A = 5: B = 5            ' 初始化变量。
Check = CBool(A = B)    ' 复选框设为 True 。
A = 0                   ' 定义变量。
Check = CBool(A)        ' 复选框设为 False 。

要求

版本1

请参阅

CByte 函数 | CCur 函数 | CDate 函数 | CDbl 函数 | CInt 函数 | CLng 函数 | CSng 函数 | CStr 函数


CByte 函数

返回表达式，此表达式已被转换为 Byte 子类型的 Variant。

CByte(expression)

expression 参数是任意有效的表达式。

说明

通常，可以使用子类型转换函数书写代码，以显示某些操作的结果应被表示为特定的数据类型，而不是默认类型。例如，在出现货币、单精度、双精度或整数运算的情况下，使用 CByte 强制执行字节运算。

CByte 函数用于进行从其他数据类型到 Byte 子类型的的国际公认的格式转换。例如对十进制分隔符（如千分符）的识别，可能取决于系统的区域设置。

如果 expression 在 Byte 子类型可接受的范围之外，则发生错误。下面的示例利用 CByte 函数把 expression 转换为 byte:

Dim MyDouble, MyByte
MyDouble = 125.5678         ' MyDouble 是一个双精度值。
MyByte = CByte(MyDouble)    ' MyByte 包含 126 。

要求

版本1

请参阅

CBool 函数 | CCur 函数 | CDate 函数 | CDbl 函数 | CInt 函数 | CLng 函数 | CSng 函数 | CStr 函数


CCur 函数

返回表达式，此表达式已被转换为 Currency 子类型的 Variant。

CCur(expression)

expression 参数是任意有效的表达式。

说明

通常，您可以使用子类型数据转换函数书写代码，以显示某些操作的结果应当被表达为特定的数据类型，而非默认的数据类型。例如在整数运算的情况下，使用 CCur 函数强制进行货币计算。

CCur 函数用于进行从其他数据类型到 Currency 子类型的国际公认的格式转换。例如，对十进制分隔符和千位分隔符的识别取决于系统的区域设置。

下面的示例使用 CCur 函数将一个表达式转换成 Currency 类型:

Dim MyDouble, MyCurr
MyDouble = 543.214588          ' MyDouble 是双精度的。
MyCurr = CCur(MyDouble * 2)    ' 把 MyDouble * 2 (1086.429176) 的结果转换为 Currency (1086.4292)。

要求

版本1

请参阅

CBool 函数 | CByte 函数 | CDate 函数 | CDbl 函数 | CInt 函数 | CLng 函数 | CSng 函数 | CStr 函数


CDate 函数

返回表达式，此表达式已被转换为 Date 子类型的 Variant。

CDate(date)

date 参数是任意有效的日期表达式。

说明

IsDate 函数用于判断 date 是否可以被转换为日期或时间。CDate 识别日期文字和时间文字，以及一些在可接受的日期范围内的数字。在将数字转换为日期时，数字的整数部分被转换为日期，分数部分被转换为从午夜开始计算的时间。

CDate 根据系统的区域设置识别日期格式。如果数据的格式不能被日期设置识别，则不能判断年、月、日的正确顺序。另外，如果长日期格式包含表示星期几的字符串，则不能被识别。

下面的示例使用 CDate 函数将字符串转换成日期类型。一般不推荐使用硬件译码日期和时间作为字符串（下面的例子已体现）。而使用时间和日期文字 (如 #10/19/1962#, #4:45:23 PM#)。

MyDate = "October 19, 1962"        ' 定义日期。
MyShortDate = CDate(MyDate)        ' 转换为日期数据类型。
MyTime = "4:35:47 PM"              ' 定义时间。
MyShortTime = CDate(MyTime)        ' 转换为日期数据类型。

要求

版本 1

请参阅

IsDate 函数


CDbl 函数

返回表达式，此表达式已被转换为 Double 子类型的 Variant。

CDbl(expression)

expression 参数是任意有效的表达式。

说明

通常，您可以使用子类型数据转换函数书写代码，以显示某些操作的结果应当被表达为特定的数据类型，而非默认的数据类型。例如在出现货币或整数运算的情况下，使用 CDbl 或 CSng 函数强制进行双精度或单精度算术运算。

CDbl 函数用于进行从其他数据类型到 Double 子类型的国际公认的格式转换。例如，十进制分隔符和千位分隔符的识别取决于系统的区域设置。

下面的示例利用 CDbl 函数把 expression 转换为 Double。

Dim MyCurr, MyDouble
MyCurr = CCur(234.456784)               ' MyCurr 是 Currency 型 (234.4567)。
MyDouble = CDbl(MyCurr * 8.2 * 0.01)    ' 把结果转换为 Double 型 (19.2254576)。

要求

版本1

请参阅

CBool 函数 | CByte 函数 | CCur 函数 | CDate 函数 | CInt 函数 | CLng 函数 | CSng 函数 | CStr 函数


Chr 函数

返回与指定的 ANSI 字符代码相对应的字符。

Chr(charcode)

charcode 参数是可以标识字符的数字。

说明

从 0 到 31 的数字表示标准的不可打印的 ASCII 代码。例如，Chr(10) 返回换行符。

下面例子利用 Chr 函数返回与指定的字符代码相对应的字符:

Dim MyChar
MyChar = Chr(65)    '返回 A。
MyChar = Chr(97)    '返回 a。
MyChar = Chr(62)    '返回 >。
MyChar = Chr(37)    '返回 %。
注意 ChrB 函数与包含在字符串中的字节数据一起使用。ChrB 不是返回一个或两个字节的字符，而总是返回单个字节的字符。ChrW 是为使用 Unicode 字符的 32 位平台提供的。它的参数是一个 Unicode (宽字符)的字符代码，因此可以避免将 ANSI 转化为 Unicode 字符。

要求

版本1

请参阅

Asc 函数


CInt 函数

返回表达式，此表达式已被转换为 Integer 子类型的 Variant。

CInt(expression)

expression 参数是任意有效的表达式。

说明

通常，可以使用子类型转换函数书写代码，以显示某些操作的结果应被表示为特定的数据类型，而不是默认类型。例如，在出现货币、单精度或双精度运算的情况下，使用 CInt 或 CLng 强制执行整数运算。

CInt 函数用于进行从其他数据类型到 Integer 子类型的国际公认的格式转换。例如对十进制分隔符（如千分符）的识别，可能取决于系统的区域设置。

如果 expression 在 Integer 子类型可接受的范围之外，则发生错误。

下面的示例利用 CInt 函数把值转换为 Integer:

Dim MyDouble, MyInt
MyDouble = 2345.5678      ' MyDouble 是 Double。
MyInt = CInt(MyDouble)    ' MyInt 包含 2346。
注意 CInt 不同于 Fix 和 Int 函数删除数值的小数部分，而是采用四舍五入的方式。当小数部分正好等于 0.5 时, CInt 总是将其四舍五入成最接近该数的偶数。例如， 0.5 四舍五入为 0, 以及 1.5 四舍五入为 2.

要求

版本1

请参阅

CBool 函数 | CByte 函数 | CCur 函数 | CDate 函数 | CDbl 函数 | CLng 函数 | CSng 函数 | CStr 函数 | Int、Fix 函数


CLng 函数

返回表达式，此表达式已被转换为 Long 子类型的 Variant。

CLng(expression)

expression 参数是任意有效的表达式。

说明

通常，您可以使用子类型数据转换函数书写代码，以显示某些操作的结果应当被表达为特定的数据类型，而非默认的数据类型。例如，在出现货币运算、单精度或双精度算术运算的情况下，使用 CInt 或 CLng 函数强制进行整数运算。

CLng 函数用于进行从其他数据类型到 Long 子类型的的国际公认的格式转换。例如，对十进制分隔符和千位分隔符的识别取决于系统的区域设置。

如果 expression 取值不在 Long子类型的允许范围内，则会出现错误。

下面的示例利用 CLng 函数把值转换为 Long:

Dim MyVal1, MyVal2, MyLong1, MyLong2
MyVal1 = 25427.45: MyVal2 = 25427.55   ' MyVal1, MyVal2 是双精度值。
MyLong1 = CLng(MyVal1)   ' MyLong1 25427。
MyLong2 = CLng(MyVal2)   ' MyLong2 包含 25428 。
注意 CLng 不同于 Fix 和 Int 函数删除小数部分， 而是采用四舍五入的方式。当小数部分正好等于 0.5 时， CLng 函数总是将其四舍五入为最接近该数的偶数。如， 0.5 四舍五入为 0, 以及 1.5 四舍五入为 2 。

要求

版本1

请参阅

CBool 函数 | CByte 函数 | CCur 函数 | CDate 函数 | CDbl 函数 | CInt 函数 | CSng 函数 | CStr 函数 | Int、Fix 函数


转换函数

Asc 函数

CBool 函数

CByte 函数

CCur 函数

CDate 函数

CDbl 函数

Chr 函数

CInt 函数

CLng 函数

CSng 函数

CStr 函数

Hex 函数

Oct 函数


Cos 函数

返回某个角的余弦值。

Cos(number)

number 参数可以是任何将某个角表示为弧度的有效数值表达式。

说明

Cos 函数取某个角并返回直角三角形两边的比值。此比值是直角三角形中该角的邻边长度与斜边长度之比。结果范围在 -1 到 1 之间。

角度转化成弧度方法是用角度乘以 pi/180。反之，弧度转化成角度的方法是用弧度乘以 180/pi。

下面的示例利用 Cos 函数返回一个角的余弦值:

Dim MyAngle, MySecant
MyAngle = 1.3                ' 用弧度定义一个角。
MySecant = 1 / Cos(MyAngle)  ' 计算正割。

要求

版本1

请参阅

Atn 函数 | 派生数学函数 | Sin 函数 | Tan 函数


CreateObject 函数

创建并返回对 Automation 对象的引用。

CreateObject(servername.typename [, location])

参数

servername
必选项。提供对象的应用程序名称。
typename
必选项。要创建的对象类型或类。
location
可选项。对象所在的网络服务器将被创建。

说明

Automation 服务器至少提供一种对象类型。例如，字处理应用程序可以提供应用程序对象、文档对象和工具条对象。

要创建 Automation 对象，将 CreateObject 函数返回的对象赋值给某对象变量：

Dim ExcelSheet
Set ExcelSheet = CreateObject("Excel.Sheet")

上述代码启动创建对象（在此实例中，是 Microsoft Excel 电子表格）的应用程序。对象创建后，就可以在代码中使用定义的对象变量引用此对象。在下面的示例中，可使用对象变量、ExcelSheet 和其他 Excel 对象，包括 Application 对象和 Cells 集合访问新对象的属性和方法。例如：

' 使 Excel 在整个 Application 对象中都可见。
ExcelSheet.Application.Visible = True
' 将一些文本放入工作表的第一个单元格中。
ExcelSheet.ActiveSheet.Cells(1,1).Value = "This is column A, row 1"
' 保存工作表。
ExcelSheet.SaveAs "C:\DOCS\TEST.XLS"
' 关闭 Excel，使 Quit 方法处于 Application 对象中。
ExcelSheet.Application.Quit
' 释放对象变量。
Set ExcelSheet = Nothing

在远程服务器上创建一个对象，当 Internet 安全关闭时只能完成。通过传递计算机名到 CreateObject 服务器名的参数，能在远程网络上创建对象。该名称如同共享部份的机器名。例如网络共享名命名为： "\\myserver\public", servername 是 "myserver"。另外,只能指定 servername 使用 DNS 格式或 IP 地址。

以下代码返回运行在命名为"myserver"的远程网络计算机上 Excel 实例的版本号 :

Function GetVersion
   Dim XLApp
   Set XLApp = CreateObject("Excel.Application", "MyServer")
   GetVersion = XLApp.Version
End Function

错误发生在指定的远程服务器不存在或无法找到。

要求

版本2

请参阅

GetObject 函数


CSng 函数

返回表达式，该表达式已被转换为 Single 子类型的 Variant。

CSng(expression)

expression 参数是任意有效的表达式。

说明

通常，可以使用子类型转换函数书写代码，以显示某些操作的结果应被表示为特定的数据类型，而不是默认类型。例如，在出现货币或整数运算的情况下，使用 CDbl 或 CSng 强制执行双精度或单精度运算。

CSng 函数用于进行从其他数据类型到 Single 子类型的国际公认的格式转换。例如，对十进制分隔符（如千分符）的识别取决于系统的区域设置。

如果 expression 在 Single 子类型允许的范围之外，则发生错误。

下面的示例利用 CSng 函数把值转换为 Single:

Dim MyDouble1, MyDouble2, MySingle1, MySingle2   ' MyDouble1, MyDouble2 是双精度值。
MyDouble1 = 75.3421115: MyDouble2 = 75.3421555
MySingle1 = CSng(MyDouble1)   ' MySingle1 包含 75.34211 。
MySingle2 = CSng(MyDouble2)   ' MySingle2 包含 75.34216 。

要求

版本1

请参阅

CBool 函数 | CByte 函数 | CCur 函数 | CDate 函数 | CDbl 函数 | CInt 函数 | CLng 函数 | CStr 函数


CStr 函数

返回表达式，该表达式已被转换为 String 子类型的 Variant。

CStr(expression)

expression 参数是任意有效的表达式。

说明

通常，可以使用子类型转换函数书写代码，以显示某些操作的结果应被表示为特定的数据类型，而不是默认类型。例如，使用 CStr 强制将结果表示为 String。

CStr 函数用于替代 Str 函数来进行从其他数据类型到 String 子类型的国际公认的格式转换。例如对十进制分隔符的识别取决于系统的区域设置。

expression 根据下表决定返回的数据：

如果 expression 为 | CStr 返回
Boolean | 字符串，包含 True 或 False。
Date | 字符串，包含系统的短日期格式日期。
Null | 运行时错误。
Empty | 零长度字符串 ("")。
Error | 字符串，包含跟随有错误号码的单词 Error。
其他数值 | 字符串，包含此数字。

下面的示例利用 CStr 函数把数字转换为 String:

Dim MyDouble, MyString
MyDouble = 437.324         ' MyDouble 是双精度值。
MyString = CStr(MyDouble)  ' MyString 包含 "437.324"。

要求

版本1

请参阅

CBool 函数 | CByte 函数 | CCur 函数 | CDate 函数 | CDbl 函数 | CInt 函数 | CLng 函数 | CSng 函数


Date 函数

返回当前系统日期。

Date

说明

下面的示例利用 Date 函数返回当前系统日期:

Dim MyDate
MyDate = Date   ' MyDate 包含当前系统日期。

要求

版本1

请参阅

CDate 函数 | Now 函数 | Time 函数


DateAdd 函数

返回已添加指定时间间隔的日期。

DateAdd(interval, number, date)

参数

interval
必选项。字符串表达式，表示要添加的时间间隔。有关数值，请参阅“设置”部分。
number
必选项。数值表达式，表示要添加的时间间隔的个数。数值表达式可以是正数（得到未来的日期）或负数（得到过去的日期）。
date
必选项。Variant 或要添加 interval 的表示日期的文字。

设置

interval 参数可以有以下值：

设置 | 描述
yyyy | 年
q | 季度
m | 月
y | 一年的日数
d | 日
w | 一周的日数
ww | 周
h | 小时
n | 分钟
s | 秒

说明

可用 DateAdd 函数从日期中添加或减去指定时间间隔。例如可以使用 DateAdd 从当天算起 30 天以后的日期或从现在算起 45 分钟以后的时间。要向 date 添加以“日”为单位的时间间隔，可以使用“一年的日数”（“y”）、“日”（“d”）或“一周的日数”（“w”）。

DateAdd 函数不会返回无效日期。如下示例将 95 年 1 月 31 日加上一个月：

NewDate = DateAdd("m", 1, "31-Jan-95")

在这个示例中，DateAdd 返回 95 年 2 月 28 日，而不是 95 年 2 月 31 日。如果 date 为 96 年 1 月 31 日，则返回 96 年 2 月 29 日，这是因为 1996 是闰年。

如果计算的日期是在公元 100 年之前，则会产生错误。

如果 number 不是 Long 型值，则在计算前四舍五入为最接近的整数。

要求

版本2

请参阅

DateDiff 函数 | DatePart 函数


DateDiff 函数

返回两个日期之间的时间间隔。

DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])

DateDiff 函数的语法有以下参数：

参数

interval
必选项。字符串表达式表示用于计算 date1 和 date2 之间的时间间隔。有关数值，请参阅“设置”部分。
date1, date2
必选项。日期表达式。用于计算的两个日期。
Firstdayofweek
可选项。指定星期中第一天的常数。如果没有指定，则默认为星期日。有关数值，请参阅“设置”部分。
Firstweekofyear
可选项。指定一年中第一周的常数。如果没有指定，则默认为 1 月 1 日所在的星期。有关数值，请参阅“设置”部分。

设置

interval 参数可以有以下值：

设置 | 描述
yyyy | 年
q | 季度
n | 月
y | 一年的日数
d | 日
w | 一周的日数
ww | 周
h | 小时
m | 分钟
s | 秒

firstdayofweek 参数可以有以下值：

常数 | 值 | 描述
vbUseSystemDayOfWeek | 0 | 使用区域语言支持 (NLS) API 设置。
vbSunday | 1 | 星期日（默认）
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六

firstweekofyear 参数可以有以下值：

常数 | 值 | 描述
vbUseSystem | 0 | 使用区域语言支持 (NLS) API 设置。
vbFirstJan1 | 1 | 由 1 月 1 日所在的星期开始（默认）。
vbFirstFourDays | 2 | 由在新年中至少有四天的第一周开始。
vbFirstFullWeek | 3 | 由在新的一年中第一个完整的周开始。

说明

DateDiff 函数用于判断在两个日期之间存在的指定时间间隔的数目。例如可以使用 DateDiff 计算两个日期相差的天数，或者当天到当年最后一天之间的星期数。

要计算 date1 和 date2 相差的天数，可以使用“一年的日数”（“y”）或“日”（“d”）。当 interval 为“一周的日数”（“w”）时，DateDiff 返回两个日期之间的星期数。如果 date1 是星期一，则 DateDiff 计算到 date2 之前星期一的数目。此结果包含 date2 而不包含 date1。如果 interval 是“周”（“ww”），则 DateDiff 函数返回日历表中两个日期之间的星期数。函数计算 date1 和 date2 之间星期日的数目。如果 date2 是星期日，DateDiff 将计算 date2，但即使 date1 是星期日，也不会计算 date1。

如果 date1 晚于 date2，则 DateDiff 函数返回负数。

firstdayofweek 参数会对使用“w”和“ww”间隔符号的计算产生影响。

如果 date1 或 date2 是日期文字，则指定的年度会成为日期的固定部分。但是如果 date1 或 date2 被包括在引号 (" ") 中并且省略年份，则在代码中每次计算 date1 或 date2 表达式时，将插入当前年份。这样就可以编写适用于不同年份的程序代码。

在 interval 为“年”（“yyyy”）时，比较 12 月 31 日和来年的 1 月 1 日，虽然实际上只相差一天，DateDiff 返回 1 表示相差一个年份。

下面的示例利用 DateDiff 函数显示今天与给定日期之间间隔天数:

Function DiffADate(theDate)
   DiffADate = "从当天开始的天数:" & DateDiff("d", Now, theDate)
End Function

要求

版本2

请参阅

DateAdd 函数 | DatePart 函数


DatePart 函数

返回给定日期的指定部分。

DatePart(interval, date[, firstdayofweek[, firstweekofyear]])

Arguments

interval
必选项。字符串表达式表示要返回的时间间隔。有关数值，请参阅“设置”部分。
Date
必选项。要计算的日期表达式。
firstdayof week
可选项。指定星期中的第一天的常数。如果没有指定，则默认为星期日。有关数值，请参阅“设置”部分。
Firstweekofyear
可选项。指定一年中第一周的常数。如果没有指定，则默认为 1 月 1 日所在的星期。有关数值，请参阅“设置”部分。

设置

interval 参数可以有以下值：

设置 | 描述
yyyy | 年
q | 季度
m | 月
y | 一年的日数
d | 日
w | 一周的日数
ww | 周
h | 小时
n | 分钟
s | 秒

firstdayofweek 参数可以有以下值：

常数 | 值 | 描述
vbUseSystemDayOfWeek | 0 | 使用区域语言支持 (NLS) API 设置。
vbSunday | 1 | 星期日（默认）
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六

firstweekofyear 参数可以有以下值：

常数 | 值 | 描述
vbUseSystem | 0 | 使用区域语言支持 (NLS) API 设置。
vbFirstJan1 | 1 | 由 1 月 1 日所在的星期开始（默认）。
vbFirstFourDays | 2 | 由在新年中至少有四天的第一周开始。
vbFirstFullWeek | 3 | 由在新的一年中第一个完整的周（不跨年度）开始。

说明

DatePart 函数用于计算日期并返回指定的时间间隔。例如使用 DatePart 计算某一天是星期几或当前的时间。

firstdayofweek 参数会影响使用“w”和“ww”间隔符号的计算。

如果 date 是日期文字，则指定的年度会成为日期的固定部分。但是如果 date 被包含在引号 (" ") 中，并且省略年份，则在代码中每次计算 date 表达式时，将插入当前年份。这样就可以编写适用于不同年份的程序代码。.

下面的示例利用 DatePart 函数获得日期并显示该日所在的季节。

Function GetQuarter(TheDate)
   GetQuarter = DatePart("q", TheDate)
End Function

要求

版本2

请参阅

DateAdd 函数 | DateDiff 函数


DateSerial 函数

对于指定的年、月、日，返回 Date 子类型的 Variant。

DateSerial(year, month, day)

Arguments

Year
从 100 到 9999 之间的数字或数值表达式。
Month
任意数值表达式。
Day
任意数值表达式。

说明

要指定日期，如 1991 年 12 月 31 日，DateSerial 函数中每个参数的取值范围都应该是可接受的；即日的取值应在 1 和 31 之间，月的取值应在 1 和 12 之间。但是，也可以使用表示某日之前或之后的年、月、日数目的数值表达式为每个参数指定相对日期。

以下样例中使用了数值表达式代替绝对日期。在这里，DateSerial 函数返回 1990 年 8 月 1 日之前十年 (1990 - 10) 零两个月 (8 - 2) 又一天 (1 - 1) 的日期：即 1980 年 5 月 31 日。

Dim MyDate1, MyDate2
MyDate1 = DateSerial(1970, 1, 1)   ' 返回 1970 年 1 月 1 日。
MyDate2 = DateSerial(1990 - 10, 8 - 2, 1 - 1)   ' 返回 1980 年 5 月 31 日。

对于 year 参数，若取值范围是从 0 到 99，则被解释为 1900 到 1999 年。对于此范围之外的 year 参数，则使用四位数字表示年份（例如 1800 年）。

当任何一个参数的取值超出可接受的范围时，则会适当地进位到下一个较大的时间单位。例如，如果指定了 35 天，则这个天数被解释成一个月加上多出来的日数，多出来的日数取决于其年份和月份。但是如果参数值超出 -32,768 到 32,767 的范围，或者由三个参数指定（无论是直接还是通过表达式指定）的日期超出了可以接受的日期范围，就会发生错误。

要求

版本1

请参阅

Date 函数 | DateValue 函数 | Day 函数 | Month 函数 | Now 函数 | TimeSerial 函数 | TimeValue 函数 | Weekday 函数 | Year 函数


DateValue 函数

返回 Date 子类型的 Variant。

DateValue(date)

date 参数应是字符串表达式，表示从 100 年 1 月 1 日到 9999 年 12 月 31 日中的一个日期。但是，date 也可以是表示上述范围内的日期、时间或日期时间混合的任意表达式。

说明

如果 date 参数包含时间信息，则 DateValue 不会返回时间信息。但是如果 date 包含无效的时间信息（如 "89:98"），就会出现错误。

如果 date 是某一字符串，其中仅包含由有效的日期分隔符分隔开的数字，则 DateValue 将会根据为系统指定的短日期格式识别月、日和年的顺序。DateValue 还会识别包含月份名称（无论是全名还是缩写）的明确日期。例如，除了能够识别 12/30/1991 和 12/30/91 之外，DateValue 还能识别 December 30, 1991 和 Dec 30, 1991。

如果省略了 date 的年份部分，DateValue 将使用计算机系统日期中的当前年份。

下面的示例利用 DateValue 函数将字符串转化成日期。也可以利用日期文字直接将日期分配给 Variant 变量， 例如， MyDate = #9/11/63#.

Dim MyDate
MyDate = DateValue("September 11, 1963")    ' 返回日期。

要求

版本1

请参阅

CDate 函数 | DateSerial 函数 | Day 函数 | Month 函数 | Now 函数 | TimeSerial 函数 | TimeValue 函数 | Weekday 函数 | Year 函数


Day 函数

返回 1 到 31 之间的一个整数（包括 1 和31），代表某月中的一天。

Day(date)

是任意可以代表日期的表达式。如果 date 参数中包含 Null，则返回 Null。

下面例子利用 Day 函数得到一个给定日期月的天数：

Dim MyDay
MyDay = Day("October 19, 1962")   'MyDay 包含 19。

要求

版本1

请参阅

Date 函数 | Hour 函数 | Minute 函数 | Month 函数 | Now 函数 | Second 函数 | Weekday 函数 | Year 函数


派生数学函数

下列是由固有数学函数派生的非固有数学函数：

函数 | 派生的等效公式
Secant（正割） | Sec(X) = 1 / Cos(X)
Cosecant（余割） | Cosec(X) = 1 / Sin(X)
Cotangent（余切） | Cotan(X) = 1 / Tan(X)
Inverse Sine（反正弦） | Arcsin(X) = Atn(X / Sqr(-X * X + 1))
Inverse Cosine（反余弦） | Arccos(X) = Atn(-X / Sqr(-X * X + 1)) + 2 * Atn(1)
Inverse Secant（反正割） | Arcsec(X) = Atn(X / Sqr(X * X - 1)) + Sgn((X) -1) * (2 * Atn(1))
Inverse Cosecant（反余割） | Arccosec(X) = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * (2 * Atn(1))
Inverse Cotangent（反余切） | Arccotan(X) = Atn(X) + 2 * Atn(1)
Hyperbolic Sine（双曲正弦） | HSin(X) = (Exp(X) - Exp(-X)) / 2
Hyperbolic Cosine（双曲余弦） | HCos(X) = (Exp(X) + Exp(-X)) / 2
Hyperbolic Tangent（双曲正切） | HTan(X) = (Exp(X) - Exp(-X)) / (Exp(X) + Exp(-X))
Hyperbolic Secant（双曲正割） | HSec(X) = 2 / (Exp(X) + Exp(-X))
Hyperbolic Cosecant（双曲余割） | HCosec(X) = 2 / (Exp(X) - Exp(-X))
Hyperbolic Cotangent（双曲余切） | HCotan(X) = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X))
Inverse Hyperbolic Sine（反双曲正弦） | HArcsin(X) = Log(X + Sqr(X * X + 1))
Inverse Hyperbolic Cosine（反双曲余弦） | HArccos(X) = Log(X + Sqr(X * X - 1))
Inverse Hyperbolic Tangent（反双曲正切） | HArctan(X) = Log((1 + X) / (1 - X)) / 2
Inverse Hyperbolic Secant（反双曲正割） | HArcsec(X) = Log((Sqr(-X * X + 1) + 1) / X)
Inverse Hyperbolic Cosecant（反双曲余割） | HArccosec(X) = Log((Sgn(X) * Sqr(X * X + 1) +1) / X)
Inverse Hyperbolic Cotangent（反双曲余切） | HArccotan(X) = Log((X + 1) / (X - 1)) / 2
以 N 为底的对数 | LogN(X) = Log(X) / Log(N)

请参阅

Atn 函数 | Cos 函数 | Exp 函数 | Log 函数 | Sin 函数 | Sqr 函数 | Tan 函数


Eval 函数

计算一个表达式的值并返回结果。

[result = ]Eval(expression)

参数

result
可选项。是一个变量，用于接受返回的结果。如果未指定结果，应考虑使用 Execute 语句代替。
expression
必选项。可以是包含任何有效 VBScript 表达式的字符串。

说明

在 VBScript 中，x = y 可以有两种解释。第一种方式是赋值语句，将 y 的值赋予 x。第二种解释是测试 x 和 y 是否相等。如果相等，result 为 True；否则 result 为 False。Eval 方法总是采用第二种解释，而 Execute 语句总是采用第一种。

注意 在Microsoft® JScript™ 中不存在这种比较与赋值的混淆，因为赋值运算符 (=) 与比较运算符 (==) 不同。

下面的例子说明了 Eval 函数的用法：

Sub GuessANumber
   Dim Guess, RndNum
   RndNum = Int((100) * Rnd(1) + 1)
   Guess = CInt(InputBox("Enter your guess:",,0))
   Do
      If Eval("Guess = RndNum") Then
         MsgBox "祝贺你！猜对了！"
         Exit Sub
      Else
         Guess = CInt(InputBox("对不起，请再试一次",,0))
      End If
   Loop Until Guess = 0
End Sub

要求

版本5

请参阅

Execute 语句


Exp 函数

返回 e（自然对数的底）的幂次方。

Exp(number)

number 参数可以是任意有效的数值表达式。

说明

如果 number 参数超过 709.782712893，则出现错误。常数 e 的值约为 2.718282。

注意 Exp 函数完成 Log 函数的反运算，并且有时引用为反对数形式。

下面的示例利用 Exp 函数返回 e 的幂次方:

Dim MyAngle, MyHSin   ' 用弧度定义角。
MyAngle = 1.3   ' 计算双曲线的正弦。
MyHSin = (Exp(MyAngle) - Exp(-1 * MyAngle)) / 2

要求

版本1

请参阅

派生数学函数 | Log 函数


Filter 函数

返回下标从零开始的数组，其中包含以特定过滤条件为基础的字符串数组的子集。

Filter(InputStrings, Value[, Include[, Compare]])

参数

InputStrings
必选项。一维数组，要在其中搜索字符串。
Value
必选项。要搜索的字符串。
Include
可选项。Boolean 值，指定返回的子字符串是否包含 Value。如果 Include 为 True，Filter 将返回包含子字符串 Value 的数组子集。如果 Include 为 False，Filter 将返回不包含子字符串 Value 的数组子集。
Compare
可选项。数字值指出使用的比较字符串类型。请参阅值设置部分。

设置

Compare 参数可以有以下值：

常数 | 值 | 描述
vbBinaryCompare | 0 | 执行二进制比较。
vbTextCompare | 1 | 执行文本比较。

说明

如果在 InputStrings 中没有找到与 Value 匹配的值，Filter 将返回空数组。如果 InputStrings 为 Null 或者不是一维数组，则会发生错误。

由 Filter 函数返回的数组仅包含足以包含匹配项数目的元素。

下面例子利用 Filter 函数返回包含搜索条件 "Mon" 的数组:

Dim MyIndex
Dim MyArray (3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyIndex = Filter(MyArray, "Mon") 'MyIndex(0) 包含 "Monday"。

要求

版本2

请参阅

Replace 函数


FormatCurrency 函数

返回表达式，此表达式已被格式化为货币值（使用系统控制面板中定义的货币符号）。

FormatCurrency(
   expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]]
)

参数

Expression
必选项。要被格式化的表达式。
NumDigitsAfterDecimal
可选项。指示小数点右侧显示位数的数值。默认值为 -1，指示使用的是计算机的区域设置。
IncludeLeadingDigit
可选项。三态常数，指示是否显示小数值小数点前面的零。有关数值，请参阅“设置”部分。
UseParensForNegativeNumbers
可选项。三态常数，指示是否将负值置于括号中。有关数值，请参阅“设置”部分。
GroupDigits
可选项。三态常数，指示是否使用计算机区域设置中指定的数字分组符号将数字分组。有关数值，请参阅“设置”部分。

设置

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数可以有以下值：

常数 | 值 | 描述
TristateTrue | -1 | True
TristateFalse | 0 | False
TristateUseDefault | -2 | 使用计算机区域设置中的设置。

说明

当省略一个或多个可选项参数时，由计算机区域设置提供被省略参数的值。与货币值相关的货币符号的位置由系统的区域设置决定。

注意 除“显示起始的零”设置来自区域设置的“数字”附签外，所有其他设置信息均取自区域设置的“货币”附签。

下面例子利用 FormatCurrency 函数把 expression 格式化为 currency 并且赋值给 MyCurrency:

Dim MyCurrency
MyCurrency = FormatCurrency(1000)   'MyCurrency 包含 $1000.00 。

要求

版本2

请参阅

FormatDateTime 函数 | FormatNumber 函数 | FormatPercent 函数


FormatDateTime 函数

返回表达式，此表达式已被格式化为日期或时间。

FormatDateTime(Date[, NamedFormat])

参数

Date
必选项。要被格式化的日期表达式。
NamedFormat
可选项。指示所使用的日期/时间格式的数值，如果省略，则使用 vbGeneralDate。

设置

NamedFormat 参数可以有以下值：

常数 | 值 | 描述
vbGeneralDate | 0 | 显示日期和/或时间。如果有日期部分，则将该部分显示为短日期格式。如果有时间部分，则将该部分显示为长时间格式。如果都存在，则显示所有部分。
vbLongDate | 1 | 使用计算机区域设置中指定的长日期格式显示日期。
vbShortDate | 2 | 使用计算机区域设置中指定的短日期格式显示日期。
vbLongTime | 3 | 使用计算机区域设置中指定的时间格式显示时间。
vbShortTime | 4 | 使用 24 小时格式 (hh:mm) 显示时间。

说明

下面例子利用 FormatDateTime 函数把表达式格式化为长日期型并且把它赋给 MyDateTime:

Function GetCurrentDate
   'FormatDateTime 把日期型格式化为长日期型。
   GetCurrentDate = FormatDateTime(Date, 1)
End Function

要求

版本2

请参阅

FormatCurrency 函数 | FormatNumber 函数 | FormatPercent 函数


FormatNumber 函数

返回表达式，此表达式已被格式化为数值。

FormatNumber(
   expression [,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]]
)

Arguments

Expression
必选项。要被格式化的表达式。
NumDigitsAfterDecimal
可选项。指示小数点右侧显示位数的数值。默认值为 -1，指示使用的是计算机的区域设置。
IncludeLeadingDigit
可选项。三态常数，指示是否显示小数值小数点前面的零。有关数值，请参阅“设置”部分。
UseParensForNegativeNumbers
可选项。三态常数，指示是否将负值置于括号中。有关数值，请参阅“设置”部分。
GroupDigits
可选项。三态常数，指示是否使用计算机区域设置中指定的数字分组符号将数字分组。有关数值，请参阅“设置”部分。

设置

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数可以有以下值：

常数 | 值 | 描述
TristateTrue | -1 | True
TristateFalse | 0 | False
TristateUseDefault | -2 | 使用计算机区域设置中的设置。

说明

当省略一个或多个可选项参数时，由计算机区域设置提供被省略参数的值。

注意 所有设置信息均取自区域设置的“数字”附签。

下面例子利用 FormatNumber 函数把数值格式化为带四位小数点的数:

Function FormatNumberDemo
   Dim MyAngle, MySecant, MyNumber
   MyAngle = 1.3                ' 用弧度定义角。
   MySecant = 1 / Cos(MyAngle)  ' 计算正割值。
   FormatNumberDemo = FormatNumber(MySecant,4) ' 把 MySecant 格式化为带四位小数点的数。
End Function

要求

版本2

请参阅

FormatCurrency 函数 | FormatDateTime 函数 | FormatPercent 函数


FormatPercent 函数

返回表达式，此表达式已被格式化为尾随有 % 符号的百分比（乘以 100 ）。

FormatPercent(expression[,NumDigitsAfterDecimal [,IncludeLeadingDigit [,UseParensForNegativeNumbers [,GroupDigits]]]])

FormatPercent 函数的语法有以下参数：

参数

Expression
必选项。要被格式化的表达式。
NumDigitsAfterDecimal
可选项。指示小数点右侧显示位数的数值。默认值为 -1，指示使用的是计算机的区域设置。
IncludeLeadingDigit
可选项。三态常数，指示是否显示小数值小数点前面的零。有关数值，请参阅“设置”部分。
UseParensForNegativeNumbers
可选项。三态常数，指示是否将负值置于括号中。有关数值，请参阅“设置”部分。
GroupDigits
可选项。三态常数，指示是否使用计算机区域设置中指定的数字分组符号将数字分组。有关数值，请参阅“设置”部分。

设置

IncludeLeadingDigit、UseParensForNegativeNumbers 和 GroupDigits 参数可以有以下值：

常数 | 值 | 描述
TristateTrue | -1 | True
TristateFalse | 0 | False
TristateUseDefault | -2 | 使用计算机区域设置中的设置。

说明

当省略一个或多个可选项参数时，由计算机区域设置提供被省略参数的值。

注意 所有设置信息均取自区域设置的“数字”附签。

下面例子利用 FormatPercent 函数把表达式格式化为百分数:

Dim MyPercent
MyPercent = FormatPercent(2/32) 'MyPercent 包含 6.25%。

要求

版本2

请参阅

FormatCurrency 函数 | FormatDateTime 函数 | FormatNumber 函数


GetLocale 函数

返回当前区域设置 ID 值。

GetLocale()

说明

locale 是用户参考信息集合，与用户的语言、国家/地区和文化传统有关。locale 决定键盘布局、字母排序顺序和日期、时间、数字与货币格式。

返回值可以是任意一个 32-位 的值，如区域设置 ID所示：

下面举例说明 GetLocale 函数的用法。要使用该代码，请复制标准HTML 文件中 <BODY> 标志之间的所有内容。

Enter Date in UK format: <input type="text" id="UKDate" size="20"><p>
Here's the US equivalent: <input type="text" id="USdate" size="20"><p>
<input type="button" value="Convert" id="button1"><p>
Enter a price in German: &nbsp; <input type="text" id="GermanNumber" size="20">
<p>
Here's the UK equivalent: <input type="text" id="USNumber" size="20"><p>
<input type="button" value="Convert" id="button2"><p>

<script language="vbscript">
Dim currentLocale
' 获取当前的区域设置
currentLocale = GetLocale

Sub Button1_onclick
  Dim original
  original = SetLocale("en-gb")
  mydate = CDate(UKDate.value)
  ' IE 始终将区域设置设置为“美国英语”，
  ' 所以请使用 currentLocale 变量将区域设置设置为“美国英语”。
  original = SetLocale(currentLocale)
  USDate.value = FormatDateTime(mydate,vbShortDate)
End Sub

Sub button2_onclick
  Dim original
  original = SetLocale("de")
  myvalue = CCur(GermanNumber.value)
  original = SetLocale("en-gb")
  USNumber.value = FormatCurrency(myvalue)
End Sub

</script>

请参阅

SetLocale 函数 | 区域设置 ID (LCID) 表


GetObject 函数 (VBScript)

Visual Basic Scripting Edition

GetObject 函数

返回对文件中 Automation 对象的引用。

GetObject([pathname] [, class])

参数

Pathname
可选项。字符串，包含待检索对象的文件的完整路径和名称。如果省略 pathname 则必须有 class。
Class
可选项。字符串，对象的类。

class 参数的语法格式为 appname.objectype，其中包括以下部分：

参数

appname
必选项。字符串，提供对象的应用程序名称。
objectype
必选项。字符串，要创建的对象的类型或类。

说明

使用 GetObject 函数可以访问文件中的 Automation 对象，而且可以将该对象赋值给对象变量。使用 Set 语句将 GetObject 返回的对象赋值给对象变量。例如：

Dim CADObject
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

在执行上述代码时，就会启动与指定路径名相关联的应用程序，同时激活指定文件中的对象。如果 pathname 是零长度字符串 ("")，GetObject 返回指定类型的新对象实例。如果省略 pathname 参数，GetObject 将返回指定类型的当前活动对象。如果没有指定类型的对象，就会出现错误。

某些应用程序允许只激活文件的一部分，方法是在文件名后加上一个惊叹号 (!) 以及用于标识要激活的文件部分的字符串。有关创建这种字符串的详细信息，请参阅创建对象的应用程序的有关文档。

例如，在绘图应用程序中，一个存放在文件中的图可能有多层。可以使用下述代码来激活图 SCHEMA.CAD 中的某一层：

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

如果没有指定对象的类，则 Automation 会根据所提供的文件名，确定要启动的应用程序以及要激活的对象。但是，有些文件可能支持多个对象类。例如，图可能支持三种不同类型的对象：Application 对象、Drawing 对象和 Toolbar 对象，所有这些都是同一个文件中的一部分。使用可选项的 class 参数可以指定文件中要激活的对象。例如：

Dim MyObject
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

在上述样例中，FIGMENT 是绘图应用程序的名称，而 DRAWING 则是它支持的一种对象类型。对象被激活之后，就可以在代码中使用所定义的对象变量来引用它。在前面的例子中，可以使用对象变量 MyObject 访问新对象的属性和方法。例如：

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "嗨，你好！"
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"
注意 在对象的当前实例存在，或者要用已加载的文件创建对象时，请使用 GetObject 函数。如果没有当前实例，并且不准备使用已加载的文件启动对象，请使用 CreateObject 函数。

如果对象已注册为单个实例的对象，则无论执行多少次 CreateObject，都只能创建该对象的一个实例。若使用单个实例对象，当使用零长度字符串 ("") 语法调用时，GetObject 总是返回同一个实例，而如果省略 pathname 参数，则会出现错误。

要求

版本 5

请参阅

CreateObject 函数


GetRef 函数

返回一个指向一过程的引用，此过程可绑定某事件。

Set object.eventname = GetRef(procname)

参数

object
必选项。事件所关联的对象的名称。
eventname
必选项。要与函数绑定的事件的名称。
procname
必选项。该字符串中包含 Sub 或 Function 过程的名称，该过程与事件关联。

说明

GetRef 函数可以用来将 VBScript 过程 (Function 或 Sub） 与 DHTML (动态 HTML)页面中可用的任何事件联系在一起。DHTML 对象模型为不同对象提供了与各种可用事件有关的信息。

在其他脚本和程序设计语言中，GetRef 所提供的功能被称为函数指针，即它指向了在指定事件发生时要执行的过程的地址。

下面的例子说明了 GetRef 函数的使用：

<SCRIPT LANGUAGE="VBScript">

Function GetRefTest()
   Dim Splash
   Splash = "GetRefTest Version 1.0"   & vbCrLf
   Splash = Splash & Chr(169) & " YourCompany 1999 "
   MsgBox Splash
End Function

Set Window.Onload = GetRef("GetRefTest")
</SCRIPT>

要求

版本 5

请参阅

Function 语句 | Set 语句 | Sub 语句


Hex 函数

返回表示十六进制数字值的字符串。

Hex(number)

number 参数是任意有效的表达式。

说明

如果 number 参数不是整数，则在进行运算前将其四舍五入为最接近的整数。

如果 number 是 | Hex 返回
Null | Null。
Empty | 零 (0)。
其他数 | 最大到八位的十六进制字符。

您可以通过在数字前面添加前缀 &H 来表示十六进制数。例如，在十六进制计数法中，&H10 表示十进制数 16。

下面的示例利用 Hex 函数返回数字的十六进制数：

Dim MyHex
MyHex = Hex(5)   ' 返回 5。
MyHex = Hex(10)   ' 返回A。
MyHex = Hex(459)   ' 返回 1CB。

要求

版本 1

请参阅

Oct 函数


Hour 函数

返回 0 到 23 之间的一个整数（包括 0 和 23），代表一天中的某一小时。

Hour(time)

time 参数是任意可以代表时间的表达式。如果 time 参数中包含 Null，则返回 Null。

下面的示例利用 Hour 函数得到当前时间的小时：

Dim MyTime, MyHour
MyTime = Now
MyHour = Hour(MyTime)   ' MyHour 包含
                        ' 代表当前时间的数值。

要求

版本 1

请参阅

Day 函数 | Minute 函数 | Now 函数 | Second 函数 | Time 函数


InputBox 函数

在对话框中显示提示，等待用户输入文本或单击按钮，并返回文本框内容。

InputBox(prompt[,
title][,default][,xpos][,ypos][,helpfile,context])

参数

prompt
字符串表达式，作为消息显示在对话框中。prompt 的最大长度大约是 1024 个字符，这取决于所使用的字符的宽度。如果 prompt 中包含多个行，则可在各行之间用回车符 (Chr(13))、换行符 (Chr(10)) 或回车换行符的组合 (Chr(13) & Chr(10)) 以分隔各行。
Title
显示在对话框标题栏中的字符串表达式。如果省略 title，则应用程序的名称将显示在标题栏中。
Default
显示在文本框中的字符串表达式，在没有其它输入时作为默认的响应值。如果省略 default，则文本框为空。
Xpos
数值表达式，用于指定对话框的左边缘与屏幕左边缘的水平距离（单位为缇）。如果省略 xpos，则对话框会在水平方向居中。
Ypos
数值表达式，用于指定对话框的上边缘与屏幕上边缘的垂直距离（单位为缇）。如果省略 ypos，则对话框显示在屏幕垂直方向距下边缘大约三分之一处。
Helpfile
字符串表达式，用于标识为对话框提供上下文相关帮助的帮助文件。如果已提供 helpfile，则必须提供 context。
Context
数值表达式，用于标识由帮助文件的作者指定给某个帮助主题的上下文编号。如果已提供 context，则必须提供 helpfile。

说明

如果同时提供了 helpfile 和 context，就会在对话框中自动添加“帮助”按钮。

如果用户单击确定或按下 ENTER，则 InputBox 函数返回文本框中的内容。如果用户单击取消，则函数返回一个零长度字符串 ("")。

下面例子利用 InputBox 函数显示一输入框并且把字符串赋值给输入变量：

Dim Input
Input = InputBox("输入名字")
MsgBox ("输入：" & Input)

要求

版本 1

请参阅

MsgBox 函数


InStr 函数

返回某字符串在另一字符串中第一次出现的位置。

InStr([start, ]string1, string2[, compare])

参数

start
可选项。数值表达式，用于设置每次搜索的开始位置。如果省略，将从第一个字符的位置开始搜索。如果 start 包含 Null，则会出现错误。如果已指定 compare，则必须要有 start 参数。
string1
必选项。接受搜索的字符串表达式。
string2
必选项。要搜索的字符串表达式。
compare
可选项。指示在计算子字符串时使用的比较类型的数值。有关数值，请参阅“设置”部分。如果省略，将执行二进制比较。

设置

compare 参数可以有以下值：

常数 | 值 | 描述
vbBinaryCompare | 0 | 执行二进制比较。
vbTextCompare | 1 | 执行文本比较。

返回值

InStr 函数返回以下值：

如果 | InStr 返回
string1 为零长度 | 0
string1 为 Null | Null
string2 为零长度 | start
string2 为 Null | Null
string2 没有找到 | 0
在 string1 中找到 string2 | 找到匹配字符串的位置
start > Len(string2) | 0

说明

下面的示例利用 InStr 搜索字符串：

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"   ' 要搜索的字符串。
SearchChar = "P"   ' Search for "P".
MyPos = Instr(4, SearchString, SearchChar, 1)   ' 在位置 4 进行的文本比较。返回 6。
MyPos = Instr(1, SearchString, SearchChar, 0)   ' 在位置 1 进行的二进制比较。返回 9。
MyPos = Instr(SearchString, SearchChar)   ' 默认情况下，进行的是二进制比较（省略了最后的参数）。返回 9。
MyPos = Instr(1, SearchString, "W")   ' 在位置 1 进行的二进制比较。返回 0（找不到 "W"）。
注意 InStrB 函数使用包含在字符串中的字节数据，所以 InStrB 返回的不是一个字符串在另一个字符串中第一次出现的字符位置，而是字节位置。

要求

版本 1

请参阅

InstrRev 函数


InStrRev 函数

返回某字符串在另一个字符串中出现的从结尾计起的位置。

InStrRev(string1, string2[, start[, compare]])

参数

string1
必选项。接受搜索的字符串表达式。
string2
必选项。被搜索的字符串表达式。
Start
可选项。数值表达式，用于设置每次搜索的开始位置。如果省略，则默认值为 -1，表示从最后一个字符的位置开始搜索。如果 start 包含 Null，则出现错误
compare
可选项。在计算子字符串时，指示要使用的比较类型的数值。如果省略，将执行二进制比较。有关数值，请参阅“设置”部分。

设置

compare 参数可以有以下值：

常数 | Value | 描述
vbBinaryCompare | 0 | 执行二进制比较。
vbDatabaseCompare | 2 | 执行基于包含在数据库（在此数据库中执行比较）中的信息的比较。

返回值

InStrRev 返回以下值：

如果 | InStrRev 返回
string1 为零长度 | 0
string1 为 Null | Null
string2 为零长度 | start
string2 为 Null | Null
string2 没有找到 | 0
在 string1 中找到 string2 | 找到匹配字符串的位置
start > Len(string2) | 0

说明

下面的示例利用 InStrRev 函数搜索字符串：

Dim SearchString, SearchChar, MyPos
SearchString ="XXpXXpXXPXXP"   ' 要搜索的字符串。
SearchChar = "P"   ' Search for "P".
MyPos = InstrRev(SearchString, SearchChar, 10, 0)   ' 在位置 10 进行的二进制比较。返回 9。
MyPos = InstrRev(SearchString, SearchChar, -1, 1)   ' 在最后位置进行的文本比较。返回 12。
MyPos = InstrRev(SearchString, SearchChar, 8)   ' 默认情况下，进行的是二进制比较（省略最后的参数）。返回 0。
注意 InStrRev 函数的语法与 InStr 函数的语法并不一样。

要求

版本 2

请参阅

Instr 函数


Int、Fix 函数

返回数字的整数部分。

Int(number)
Fix(number)

number 参数可以是任意有效的数值表达式。如果 number 参数包含 Null，则返回 Null。

说明

Int 和 Fix 函数都删除 number 参数的小数部分并返回以整数表示的结果。

Int 和 Fix 函数的区别在于如果 number 参数为负数时，Int 函数返回小于或等于 number 的第一个负整数，而 Fix 函数返回大于或等于 number 参数的第一个负整数。例如，Int 将 -8.4 转换为 -9，而 Fix 函数将 -8.4 转换为 -8。

Fix(number) 等同于：

Sgn(number) * Int(Abs(number))

下面的示例说明 Int 和 Fix 函数如何返回数字的整数部分：

MyNumber = Int(99.8)    ' 返回 99。
MyNumber = Fix(99.2)    ' 返回 99。
MyNumber = Int(-99.8)   ' 返回 -100。
MyNumber = Fix(-99.8)   ' 返回-99。
MyNumber = Int(-99.2)   ' 返回 -100。
MyNumber = Fix(-99.2)   ' 返回 -99。

要求

版本 1

请参阅

CInt 函数 | Round 函数


IsArray 函数

返回 Boolean 值指明某变量是否为数组。

IsArray(varname)

varname 参数可以是任意变量。

说明

如果变量是数组，IsArray 函数返回 True；否则，函数返回 False。当变量中包含有数组时，使用 IsArray 函数很有效。

下面的示例利用 IsArray 函数验证 MyVariable 是否为一数组：

Dim MyVariable
Dim MyArray(3)
MyArray(0) = "Sunday"
MyArray(1) = "Monday"
MyArray(2) = "Tuesday"
MyVariable = IsArray(MyArray) ' MyVariable 包含 "True"。

要求

版本 1

请参阅

IsDate 函数 | IsEmpty 函数 | IsNull 函数 | IsNumeric 函数 | IsObject 函数 | VarType 函数


IsDate 函数

返回 Boolean 值指明某表达式是否可以转换为日期。

IsDate(expression)

expression 参数可以是任意可被识别为日期和时间的日期表达式或字符串表达式。

说明

如果表达式是日期或可合法地转化为有效日期，则 IsDate 函数返回 True；否则函数返回 False。在 Microsoft Windows 操作系统中，有效的日期范围公元 100 年 1 月 1 日到公元 9999 年 12 月 31 日；合法的日期范围随操作系统不同而不同。

下面的示例利用 IsDate 函数决定表达式是否能转换为日期型：

Dim MyDate, YourDate, NoDate, MyCheck
MyDate = "October 19, 1962": YourDate = #10/19/62#: NoDate = "Hello"
MyCheck = IsDate(MyDate)   ' 返回 True。
MyCheck = IsDate(YourDate)   ' 返回 True。
MyCheck = IsDate(NoDate)   ' 返回 False。

要求

版本 1

请参阅

CDate 函数 | IsArray 函数 | IsEmpty 函数 | IsNull 函数 | IsNumeric 函数 | IsObject 函数 | VarType 函数


IsEmpty 函数

返回 Boolean 值指明变量是否已初始化。

IsEmpty(expression)

expression 参数可以是任意表达式。然而，由于 IsEmpty 用于判断一个变量是否已初始化，故 expression 参数经常是一个变量名。

说明

如果变量未初始化或显式地设置为 Empty，则函数 IsEmpty 返回 True；否则函数返回 False。如果 expression 包含一个以上的变量，总返回 False。

下面的示例利用 IsEmpty 函数决定变量是否能被初始化：

Dim MyVar, MyCheck
MyCheck = IsEmpty(MyVar)   ' 返回 True。
MyVar = Null   ' 赋为 Null。
MyCheck = IsEmpty(MyVar)   ' 返回 False。
MyVar = Empty   ' 赋为 Empty。
MyCheck = IsEmpty(MyVar)   ' 返回 True。

要求

版本 1

请参阅

IsArray 函数 | IsDate 函数 | IsNull 函数 | IsNumeric 函数 | IsObject 函数 | VarType 函数


IsNull 函数

返回 Boolean 值，指明表达式是否不包含任何有效数据 (Null)。

IsNull(expression)

expression 参数可以是任意表达式。

说明

如果 expression 为 Null，则 IsNull 返回 True，即表达式不包含有效数据，否则 IsNull 返回 False。如果 expression 由多个变量组成，则表达式的任何组成变量中的 Null 都会使整个表达式返回 True。

Null 值指出变量不包含有效数据。Null 与 Empty 不同，后者指出变量未经初始化。Null 与零长度字符串 ("") 也不同，零长度字符串往往指的是空串。

警告 使用 IsNull 函数可以判断表达式是否包含 Null 值。在某些情况下想使表达式取值为 True，例如 IfVar=Null 和 IfVar<>Null，但它们通常总是为 False。这是因为任何包含 Null 的表达式本身就为 Null，所以表达式的结果为 False。

下面的示例利用 IsNull 函数决定变量是否包含 Null ：

Dim MyVar, MyCheck
MyCheck = IsNull(MyVar)   ' 返回 False。
MyVar = Null   ' 赋为 Null。
MyCheck = IsNull(MyVar)   ' 返回 True。
MyVar = Empty   ' 赋为 Empty。
MyCheck = IsNull(MyVar)   ' 返回 False。

要求

版本 1

请参阅

IsArray 函数 | IsDate 函数 | IsEmpty 函数 | IsNumeric 函数 | IsObject 函数 | VarType 函数


IsNumeric 函数

返回 Boolean 值指明表达式的值是否为数字。

IsNumeric(expression)

expression 参数可以是任意表达式。

说明

如果整个 expression 被识别为数字，IsNumeric 函数返回 True；否则函数返回 False。如果 expression 是日期表达式，IsNumeric 函数返回 False。

下面的示例利用 IsNumeric 函数决定变量是否可以作为数值：

Dim MyVar, MyCheck
MyVar = 53   '赋值。
MyCheck = IsNumeric(MyVar)   ' 返回 True。
MyVar = "459.95"   ' 赋值。
MyCheck = IsNumeric(MyVar)   ' 返回True。
MyVar = "45 Help"   ' 赋值。
MyCheck = IsNumeric(MyVar)   ' 返回 False。

要求

版本 1

请参阅

IsArray 函数 | IsDate 函数 | IsEmpty 函数 | IsNull 函数 | IsObject 函数 | VarType 函数


IsObject 函数

返回 Boolean 值指明表达式是否引用了有效的 Automation 对象。

IsObject(expression)

expression 参数可以是任意表达式。

说明

如果 expression 是 Object 子类型变量或用户自定义的对象，则 IsObject 返回 True；否则函数返回 False。

下面的示例利用 IsObject 函数决定标识符是否代表对象变量：

Dim MyInt, MyCheck, MyObject
Set MyObject = Me
MyCheck = IsObject(MyObject)   ' 返回 True。
MyCheck = IsObject(MyInt)   ' 返回 False。

要求

版本 1

请参阅

IsArray 函数 | IsDate 函数 | IsEmpty 函数 | IsNull 函数 | IsNumeric 函数 | Set 语句 | VarType 函数


Join 函数

返回一个字符串，此字符串由包含在数组中的许多子字符串连接创建。

Join(list[，delimiter])

参数

list
必选项。包含要连接的子字符串一维数组。
Delimiter
可选项。在返回字符串中用于分隔子字符串的字符。如果省略，将使用空字符 ("")。如果 delimiter 是零长度字符串，则在同一列表中列出全部项，没有分界符。

说明

下面的示例利用 Join 函数联合 MyArray 的子字符串：

Dim MyString
Dim MyArray(3)
MyArray(0) = "Mr."
MyArray(1) = "John "
MyArray(2) = "Doe "
MyArray(3) = "III"
MyString = Join(MyArray) 'MyString 包含 "Mr. John Doe III"。

要求

版本 2

请参阅

Split 函数


LBound 函数

返回指定数组维的最小可用下标。

LBound(arrayname[, dimension])

参数

arrayname
数组变量名，遵循标准变量命名规则。
Dimension
指明要返回哪一维下界的整数。使用 1 表示第一维，2 表示第二维，以此类推。如果省略 dimension 参数，默认值为 1。

说明

LBound 函数与 UBound 函数共同使用以确定数组的大小。使用 UBound 函数可以找到数组某一维的上界。

任一维的下界都是 0。

要求

版本 1

请参阅

Dim 语句 | ReDim 语句 | UBound 函数


LCase 函数

返回字符串的小写形式。

LCase(string)

string 参数是任意有效的字符串表达式。如果 string 参数中包含 Null，则返回 Null。

说明

仅大写字母转换成小写字母；所有小写字母和非字母字符保持不变。

下面的示例利用 LCase 函数把大写字母转换为小写字母：

Dim MyString
Dim LCaseString
MyString = "VBSCript"
LCaseString = LCase(MyString)   ' LCaseString 包含 "vbscript"。

要求

版本 1

请参阅

UCase 函数


Left 函数

返回指定数目的从字符串的左边算起的字符。

Left(string, length)

参数

string
字符串表达式，其最左边的字符被返回。如果 string 参数中包含 Null，则返回 Null。
Length
数值表达式，指明要返回的字符数目。如果是 0，返回零长度字符串 ("")；如果大于或等于 string 参数中的字符总数，则返回整个字符串。

说明

可使用 Len 函数确定 string 参数中的字符数目。

下面的示例利用Left 函数返回MyString 的左边三个字母：

Dim MyString, LeftString
MyString = "VBSCript"
LeftString = Left(MyString, 3) 'LeftString 包含 "VBS"。
注意 LeftB 函数与包含在字符串中字节数据一起使用。length 不是指定返回的字符串数，而是字节数。

要求

版本 1

请参阅

Len 函数 | Mid 函数 | Right 函数


Len 函数

返回字符串内字符的数目，或是存储一变量所需的字节数。

Len(string | varname)

参数

string
任意有效的字符串表达式。如果 string 参数包含 Null，则返回 Null。
Varname
任意有效的变量名。如果 varname 参数包含 Null，则返回 Null。

说明

下面的示例利用 Len 函数返回字符串中的字符数目：

Dim MyString
MyString = Len("VBSCRIPT") 'MyString 包含 8。
注意 LenB 函数与包含在字符串中的字节数据一起使用。LenB 不是返回字符串中的字符数，而是返回用于代表字符串的字节数。

要求

版本 1

请参阅

InStr 函数


LoadPicture 函数

返回图片对象。

LoadPicture(picturename)

picturename 参数是字符串表达式，该表达式指明了要装入的图片文件的名称。

说明

可以由 LoadPicture 识别的图形格式有位图文件 (.bmp)、图标文件 (.ico)、行程编码文件 (.rle)、图元文件 (.wmf)、增强型图元文件 (.emf)、GIF (.gif) 文件和 JPEG (.jpg) 文件。

要求

版本 2


Log 函数

返回数值的自然对数。

Log(number)

number 参数是任意大于 0 的有效数值表达式。

说明

自然对数是以 e 为底的对数。常数 e 的值约为 2.718282。

用 n 的自然对数除 x 的自然对数，可以得到以 n 为底的 x 的对数。如下所示：

Logn(x) = Log(x) / Log(n)

以下示例为一个自定义的 Function 过程，该过程计算以 10 为底的对数：

Function Log10(X)
   Log10 = Log(X) / Log(10)
End Function

要求

版本 1

请参阅

派生数学函数 | Exp 函数


LTrim、RTrim 和 Trim 函数

返回不带前导空格 (LTrim)、后续空格 (RTrim) 或前导与后续空格 (Trim) 的字符串副本。

LTrim(string)
RTrim(string)
Trim(string)

string 参数是任意有效的字符串表达式。如果 string 参数中包含 Null，则返回 Null。

说明

下面的示例利用 LTrim, RTrim, 和 Trim 函数分别用来除去字符串开始的空格、尾部空格、 开始和尾部空格：

Dim MyVar
MyVar = LTrim("   vbscript ")   'MyVar 包含 "vbscript "。
MyVar = RTrim("   vbscript ")   'MyVar 包含 "   vbscript"。
MyVar = Trim("   vbscript ")   'MyVar 包含 "vbscript"。

要求

版本 1

请参阅

Left 函数 | Right 函数


数学函数

Abs 函数

Atn 函数

Cos 函数

Exp 函数

Fix 函数

Int 函数

Log 函数

Rnd 函数

Sgn 函数

Sin 函数

Sqr 函数

Tan 函数

派生数学函数


Mid 函数

从字符串中返回指定数目的字符。

Mid(string, start[, length])

参数

string
字符串表达式，从中返回字符。如果 string 包含 Null，则返回 Null。
Start
string 中被提取的字符部分的开始位置。如果 start 超过了 string 中字符的数目，Mid 将返回零长度字符串 ("")。
Length
要返回的字符数。如果省略或 length 超过文本的字符数（包括 start 处的字符），将返回字符串中从 start 到字符串结束的所有字符。

说明

要判断 string 中字符的数目，可使用 Len 函数。

下面的示例利用 Mid 函数返回字符串中从第四个字符开始的六个字符：

Dim MyVar
MyVar = Mid("VB脚本is fun!", 4, 6) 'MyVar 包含 "Script"。
注意 MidB 函数与包含在字符串中的字节数据一起使用。其参数不是指定字符数，而是字节数。

要求

版本 1

请参阅

Left 函数 | Len 函数 | LTrim、RTrim 和 Trim 函数 | Right 函数


Minute

返回 0 到 59 之间的一个整数（包括 0 和59），代表一小时内的某一分钟。

Minute(time)

time 参数是任意可以代表时间的表达式。如果 time 参数包含 Null，则返回 Null。

说明

下面的示例利用 Minute 函数返回小时的分钟数：

Dim MyVar
MyVar = Minute(Now)

要求

版本 1

请参阅

Day 函数 | Hour 函数 | Now 函数 | Second 函数 | Time 函数


Month 函数

返回 1 到 12 之间的一个整数（包括 1 和 12），代表一年中的某月。

Month(date)

date 参数是任意可以代表日期的表达式。如果 date 参数中包含 Null，则返回 Null。

说明

下面的示例利用 Month 函数返回当前月：

Dim MyVar
MyVar = Month(Now) ' MyVar 包含
                   ' 与当前月对应的数字。

要求

版本 1

请参阅

Date 函数 | Day 函数 | Now 函数 | Weekday 函数 | Year 函数


MonthName 函数

返回表明指定月份的字符串。

MonthName(month[, abbreviate])

参数

month
必选项。月份的数值定义。例如，一月是 1，二月是 2，以此类推。
Abbreviate
可选项。Boolean 值，表明月份名称是否简写。如果省略，默认值为 False，即不简写月份名称。

说明

下面的示例利用MonthName 函数为日期表达式返回月份的缩写：

Dim MyVar
MyVar = MonthName(10, True) ' MyVar 包含 "Oct"。

要求

版本 2

请参阅

WeekDayName 函数


MsgBox 函数

在对话框中显示消息，等待用户单击按钮，并返回一个值指示用户单击的按钮。

MsgBox(prompt[, buttons][, title][, helpfile, context])

参数

prompt
作为消息显示在对话框中的字符串表达式。prompt 的最大长度大约是 1024 个字符，这取决于所使用的字符的宽度。如果 prompt 中包含多个行，则可在各行之间用回车符 (Chr(13))、换行符 (Chr(10)) 或回车换行符的组合 (Chr(13) & Chr(10)) 分隔各行。
Buttons
数值表达式，是表示指定显示按钮的数目和类型、使用的图标样式，默认按钮的标识以及消息框样式的数值的总和。有关数值，请参阅“设置”部分。如果省略，则 buttons 的默认值为 0。
Title
显示在对话框标题栏中的字符串表达式。如果省略 title，则将应用程序的名称显示在标题栏中。
Helpfile
字符串表达式，用于标识为对话框提供上下文相关帮助的帮助文件。如果已提供 helpfile，则必须提供 context。在 16 位系统平台上不可用。
Context
数值表达式，用于标识由帮助文件的作者指定给某个帮助主题的上下文编号。如果已提供 context，则必须提供 helpfile。在 16 位系统平台上不可用。

设置

buttons 参数可以有以下值：

常数 | 值 | 描述
vbOKOnly | 0 | 只显示确定按钮。
vbOKCancel | 1 | 显示确定和取消按钮。
vbAbortRetryIgnore | 2 | 显示放弃、重试和忽略按钮。
vbYesNoCancel | 3 | 显示是、否和取消按钮。
vbYesNo | 4 | 显示是和否按钮。
vbRetryCancel | 5 | 显示重试和取消按钮。
vbCritical | 16 | 显示临界信息图标。
vbQuestion | 32 | 显示警告查询图标。
vbExclamation | 48 | 显示警告消息图标。
vbInformation | 64 | 显示信息消息图标。
vbDefaultButton1 | 0 | 第一个按钮为默认按钮。
vbDefaultButton2 | 256 | 第二个按钮为默认按钮。
vbDefaultButton3 | 512 | 第三个按钮为默认按钮。
vbDefaultButton4 | 768 | 第四个按钮为默认按钮。
vbApplicationModal | 0 | 应用程序模式：用户必须响应消息框才能继续在当前应用程序中工作。
vbSystemModal | 4096 | 系统模式：在用户响应消息框前，所有应用程序都被挂起。

第一组值 (0 - 5) 用于描述对话框中显示的按钮类型与数目；第二组值 (16, 32, 48, 64) 用于描述图标的样式；第三组值 (0, 256, 512) 用于确定默认按钮；而第四组值 (0, 4096) 则决定消息框的样式。在将这些数字相加以生成 buttons 参数值时，只能从每组值中取用一个数字。

返回值

MsgBox 函数有以下返回值：

常数 | 值 | 按钮
vbOK | 1 | 确定
vbCancel | 2 | 取消
vbAbort | 3 | 放弃
vbRetry | 4 | 重试
vbIgnore | 5 | 忽略
vbYes | 6 | 是
vbNo | 7 | 否

说明

如果同时提供了 helpfile 和 context，则用户可以按 F1 键以查看与上下文相对应的帮助主题。

如果对话框显示取消按钮，则按 ESC 键与单击取消的效果相同。如果对话框包含帮助按钮，则有为对话框提供的上下文相关帮助。但是在单击其他按钮之前，不会返回任何值。

当MicroSoft Internet Explorer使用MsgBox函数时，任何对话框的标题总是包含"VBScript",以便于将其与标准对话框区别开来。

下面的例子演示了 MsgBox 函数的用法：

Dim MyVar
MyVar = MsgBox ("Hello World!", 65, "MsgBox Example")
   ' MyVar 包含 1 或 2，这取决于单击的是哪个按钮。

要求

版本 1

请参阅

InputBox 函数


Now

根据计算机系统设定的日期和时间返回当前的日期和时间值。

Now

说明

下面的示例利用 Now 函数返回当前的日期和时间：

Dim MyVar
MyVar = Now ' MyVar 包含当前的日期和时间。

要求

版本 1

请参阅

Date 函数 | Day 函数 | Hour 函数 | Minute 函数 | Month 函数 | Second 函数 | Time 函数 | Weekday 函数 | Year 函数


Oct

返回表示数字八进制值的字符串。

Oct(number)

number 参数是任意有效的表达式。

说明

如果 number 参数不是整数，则在进行运算前，将其四舍五入到最接近的整数。

如果 number 是 | Oct 返回
Null | Null。
Empty | 零 (0)。
任意其他数字 | 最大可到 11 位的八进制字符。

用户也可以通过直接在数前加上 &O 表示八进制数。例如，&O10 为十进制数 8 的八进制表示法。

下面的示例利用 Oct 函数返回数值的八进制数：

Dim MyOct
MyOct = Oct(4)     ' 返回 4。
MyOct = Oct(8)     ' 返回 10。
MyOct = Oct(459)   ' 返回 713。

要求

版本 1

请参阅

Hex 函数


Replace 函数

返回字符串，其中指定数目的某子字符串被替换为另一个子字符串。

Replace(expression, find, replacewith[, compare[, count[, start]]])

参数

expression
必选项。字符串表达式包含要替代的子字符串。
Find
必选项。被搜索的子字符串。
Replacewith
必选项。用于替换的子字符串。
Start
可选项。expression 中开始搜索子字符串的位置。如果省略，默认值为 1。在和count 关联时必须用
count
可选项。执行子字符串替换的数目。如果省略，默认值为 -1，表示进行所有可能的替换。在和 start 关联时必须用。
Compare
可选项。指示在计算子字符串时使用的比较类型的数值。有关数值，请参阅“设置”部分。如果省略,缺省值为 0 ,这意味着必须进行二进制比较。

设置

compare 参数可以有以下值：

常数 | 值 | 描述
vbBinaryCompare | 0 | 执行二进制比较。
vbTextCompare | 1 | 执行文本比较。

返回值

Replace 返回以下值：

如果 | Replace 返回
expression 为零长度 | 零长度字符串 ("")。
expression 为 Null | 错误。
find 为零长度 | expression 的副本。
replacewith 为零长度 | expression 的副本，其中删除了所有由 find 参数指定的内容。
start > Len(expression) | 零长度字符串。
count 为 0 | expression 的副本。

说明

Replace 函数的返回值是经过替换（从由 start 指定的位置开始到 expression 字符串的结尾）后的字符串，而不是原始字符串从开始至结尾的副本。

下面的示例利用 Replace 函数返回字符串：

Dim MyString
MyString = Replace("XXpXXPXXp", "p", "Y")   '二进制比较从字符串左端开始。返回 "XXYXXPXXY"。
MyString = Replace("XXpXXPXXp", "p", "Y", '文本比较从第三个字符开始。返回 "YXXYXXY"。3，, -1, 1)

要求

版本 2

请参阅

Filter 函数


RGB 函数

返回代表 RGB 颜色值的整数。

RGB(red, green, blue)

参数

red
必选项。0 到 255 间的整数，代表颜色中的红色成分。
green
必选项。0 到 255 间的整数，代表颜色中的绿色成分。
blue
必选项。0 到 255 间的整数，代表颜色中的蓝色成分。

说明

接受颜色说明的应用程序方法和属性，要求该说明以整数代表 RGB 颜色值。RGB 颜色值指定了红色、绿色、蓝色的相对强度，三色组合形成显示的特定颜色。

低字节值表示红色，中字节值表示绿色，高字节值表示蓝色。

对于要求反转字节顺序的应用程序，下面函数在反转字节顺序下提供相同信息：

Function RevRGB(red, green, blue)
   RevRGB= CLng(blue + (green * 256) + (red * 65536))
End Function

RGB 函数中任一超过 255 的参数都假定为 255。

要求

版本 2


Right 函数

从字符串右边返回指定数目的字符。

Right(string, length)

参数

string
字符串表达式，其最右边的字符被返回。如果 string 参数中包含 Null，则返回 Null。
Length
数值表达式，指明要返回的字符数目。如果为 0，返回零长度字符串；如果此数大于或等于 string 参数中的所有字符数目，则返回整个字符串。

说明

要确定 string 参数中的字符数目，使用 Len 函数。

下面的示例利用 Right 函数从字符串右边返回指定数目的字符：

Dim AnyString, MyStr
AnyString = "Hello World"      ' 定义字符串。
MyStr = Right(AnyString, 1)    ' 返回 "d"。
MyStr = Right(AnyString, 6)    ' 返回 " World"。
MyStr = Right(AnyString, 20)   ' 返回 "Hello World"。
注意 RightB 函数用于字符串中的字节数据，length 参数指定返回的是字节数目，而不是字符数目。

要求

版本 2

请参阅

Left 函数 | Len 函数 | Mid 函数


Rnd 函数

返回一个随机数。

Rnd[(number)]

number 参数可以是任意有效的数值表达式。

说明

Rnd 函数返回一个小于 1 但大于或等于 0 的值。number 的值决定了 Rnd 生成随机数的方式：

如果 number 为 | Rnd 生成
小于零 | 每次都相同的值，使用 number 作为种子。
大于零 | 序列中的下一个随机数。
等于零 | 最近生成的数。
省略 | 序列中的下一个随机数。

因每一次连续调用 Rnd 函数时都用序列中的前一个数作为下一个数的种子，所以对于任何最初给定的种子都会生成相同的数列。

在调用 Rnd 之前，先使用无参数的 Randomize 语句初始化随机数生成器，该生成器具有基于系统计时器的种子。

要产生指定范围的随机整数，请使用以下公式：

Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

这里， upperbound 是此范围的上界，而 lowerbound 是此范围内的下界。

注意 要重复随机数的序列，请在使用数值参数调用 Randomize 之前，立即用负值参数调用 Rnd。使用同样 number 值的 Randomize 不能重复先前的随机数序列。

要求

版本 1

请参阅

Randomize 语句


Round 函数

返回按指定位数进行四舍五入的数值。

Round(expression[, numdecimalplaces])

参数

Expression
必选项。数值表达式被四舍五入。
Numdecimalplaces
可选项。数字表明小数点右边有多少位进行四舍五入。如果省略，则 Round 函数返回整数。

说明

下面的示例利用 Round 函数将数值四舍五入到两位小数：

Dim MyVar, pi
pi = 3.14159
MyVar = Round(pi, 2) 'MyVar contains 3.14。

要求

版本 2

请参阅

Int、Fix 函数


ScriptEngine 函数 (VBScript)

Visual Basic Scripting Edition

ScriptEngine 函数

返回一个代表当前使用的脚本程序语言的字符串。

ScriptEngine

返回值

ScriptEngine 函数可返回下列字符串：

字符串 | 描述
VBScript | 表明当前使用的编写脚本引擎是 Microsoft® Visual Basic® Scripting Edition。
JScript® | 表明当前使用的编写脚本引擎是 Microsoft JScript®。
VBA | 表明当前使用的编写脚本引擎是 Microsoft Visual Basic for Applications。

说明

下面的示例利用 ScriptEngine 函数返回描述所用书写语言的字符串：

Function GetScriptEngineInfo
   Dim s
   s = ""   ' 用必要的信息形成字符串。
   s = ScriptEngine & " Version "
   s = s & ScriptEngineMajorVersion & "."
   s = s & ScriptEngineMinorVersion & "."
   s = s & ScriptEngineBuildVersion
   GetScriptEngineInfo = s   '返回结果。
End Function

要求

版本 2

请参阅

ScriptEngineBuildVersion 函数 | ScriptEngineMajorVersion 函数 | ScriptEngineMinorVersion 函数


ScriptEngineBuildVersion 函数 (VBScript)

Visual Basic Scripting Edition

ScriptEngineBuildVersion 函数

返回使用的编写脚本引擎的生成版本号。

ScriptEngineBuildVersion

说明

返回值直接对应于所使用的 Scripting 程序语言的 DLL 文件中包含的版本信息。

下面的示例利用 ScriptEngineBuildVersion 函数返回创建的编写脚本引擎版本号：

Function GetScriptEngineInfo
   Dim s
   s = ""   ' 用必要的信息形成字符串。
   s = ScriptEngine & " Version "
   s = s & ScriptEngineMajorVersion & "."
   s = s & ScriptEngineMinorVersion & "."
   s = s & ScriptEngineBuildVersion
   GetScriptEngineInfo = s   ' 返回结果。
End Function

要求

版本 2

请参阅

ScriptEngine 函数 | ScriptEngineMajorVersion 函数 | ScriptEngineMinorVersion 函数


ScriptEngineMajorVersion 函数 (VBScript)

Visual Basic Scripting Edition

ScriptEngineMajorVersion 函数

返回使用的编写脚本引擎的主版本号。

ScriptEngineMajorVersion

说明

返回值直接对应于所使用的脚本程序语言中 DLL 文件包含的版本信息。

下面的示例利用 ScriptEngineMajorVersion 函数返回编写脚本引擎的版本号：

Function GetScriptEngineInfo
   Dim s
   s = ""   ' 用必要的信息形成字符串。
   s = ScriptEngine & " Version "
   s = s & ScriptEngineMajorVersion & "."
   s = s & ScriptEngineMinorVersion & "."
   s = s & ScriptEngineBuildVersion
   GetScriptEngineInfo = s   ' 返回结果。
End Function

要求

版本 2

请参阅

ScriptEngine 函数 | ScriptEngineBuildVersion 函数 | ScriptEngineMinorVersion 函数


ScriptEngineMinorVersion 函数 (VBScript)

Visual Basic Scripting Edition

ScriptEngineMinorVersion 函数

返回使用的编写引擎引擎的次版本号。

ScriptEngineMinorVersion

说明

返回值直接对应于所使用的脚本程序语言中 DLL 文件包含的版本信息。

下面的示例利用 ScriptEngineMinorVersion 函数返回编写引擎的副版本号：

Function GetScriptEngineInfo
   Dim s
   s = ""   ' 用必要的信息形成字符串。
   s = ScriptEngine & " Version "
   s = s & ScriptEngineMajorVersion & "."
   s = s & ScriptEngineMinorVersion & "."
   s = s & ScriptEngineBuildVersion
   GetScriptEngineInfo = s   ' 返回结果。
End Function

要求

版本 2

请参阅

ScriptEngine 函数 | ScriptEngineBuildVersion 函数 | ScriptEngineMajorVersion 函数


Second 函数

返回 0 到 59 之间的一个整数（包括 1 和 59），代表一分钟内的某一秒。

Second(time)

time 参数是任意可以代表时间的表达式。如果 time 参数中包含 Null，则返回 Null。

说明

下面的示例利用 Second 函数返回当前秒：

Dim MySec
MySec = Second(Now)
   ' MySec 包含代表当前秒的数字。

要求

版本 2

请参阅

Day 函数 | Hour 函数 | Minute 函数 | Now 函数 | Time 函数


SetLocale 函数

设置全球区域设置，并返回以前的区域设置。

SetLocale(lcid)

lcid 参数可以是任意一个合法的 32 位数值或短字符串，该值必须唯一标识一个地理区域。能被识别的值可以查阅区域设置 ID 表。

说明

若 lcid 为零，区域被设置为与当前系统设置匹配。

一个 locale 是用户参考信息集合，与用户的语言、国家/地区和文化传统有关。该 locale 决定键盘布局、字母排序顺序和日期、时间、数字与货币格式。

下面举例说明 SetLocale 函数的用法。要使用该代码，请复制标准HTML 文件中 <BODY> 标志之间的所有内容。

Enter Date in UK format: <input type="text" id="UKDate" size="20"><p>
Here's the US equivalent: <input type="text" id="USdate" size="20"><p>
<input type="button" value="Convert" id="button1"><p>
Enter a price in German: &nbsp; <input type="text" id="GermanNumber" size="20">
<p>
Here's the UK equivalent: <input type="text" id="USNumber" size="20"><p>
<input type="button" value="Convert" id="button2"><p>

<script language="vbscript">
Dim currentLocale
' 获取当前的区域设置
currentLocale = GetLocale

Sub Button1_onclick
  Dim original
  original = SetLocale("en-gb")
  mydate = CDate(UKDate.value)
  ' IE 始终将区域设置设置为“美国英语”，
  ' 所以请使用 currentLocale 变量将区域设置设置为“美国英语”。
  original = SetLocale(currentLocale)
  USDate.value = FormatDateTime(mydate,vbShortDate)
End Sub

Sub button2_onclick
  Dim original
  original = SetLocale("de")
  myvalue = CCur(GermanNumber.value)
  original = SetLocale("en-gb")
  USNumber.value = FormatCurrency(myvalue)
End Sub

</script>

请参阅

GetLocale 函数 | 区域设置 ID (LCID) 表


Sgn 函数

返回表示数字符号的整数。

Sgn(number)

number 参数可以是任意有效的数值表达式。

返回值

Sgn 函数有如下返回值：

如果 number 为 | Sgn 返回
大于零 | 1
等于零 | 0
小于零 | -1

说明

number 参数的符号决定 Sgn 函数的返回值。

下面的示例利用 Sgn 函数决定数值的符号：

Dim MyVar1, MyVar2, MyVar3, MySign
MyVar1 = 12: MyVar2 = -2.4: MyVar3 = 0
MySign = Sgn(MyVar1)   ' 返回 1。
MySign = Sgn(MyVar2)   ' 返回 -1。
MySign = Sgn(MyVar3)   ' 返回 0。

要求

版本 1

请参阅

Abs 函数


Sin 函数

返回某个角的正弦值。

Sin(number)

number 参数可以是任何将某个角表示为弧度的有效数值表达式。

说明

Sin 函数取某个角并返回直角三角形两边的比值。此比值是直角三角形中该角的对边长度与斜边长度之比。结果的范围在 -1 到 1 之间。

将角度乘以 pi/180 即可转换为弧度，将弧度乘以 180/pi 即可转换为角度。

下面例子利用 Sin 返回角度的正弦：

Dim MyAngle, MyCosecant
MyAngle = 1.3   ' 用弧度定义角度。
MyCosecant = 1 / Sin(MyAngle)   '计算余割。

要求

版本 1

请参阅

Atn 函数 | Cos 函数 | 派生数学函数 | Tan 函数


Space 函数

返回由指定数目的空格组成的字符串。

Space(number)

number 参数为字符串中用户所需的空格数。

说明

下面的示例利用 Space 函数返回由指定数目空格组成的字符串：

Dim MyString
MyString = Space(10)   ' 返回具有 10 个空格的字符串。
MyString = "Hello" & Space(10) & "World" ' 在两个字符串之间插入 10 个空格。

要求

版本 1

请参阅

String 函数


Split 函数

返回基于 0 的一维数组，其中包含指定数目的子字符串。

Split(expression[, delimiter[, count[, start]]])

参数

expression
必选项。字符串表达式，包含子字符串和分隔符。如果 expression 为零长度字符串，Split 返回空数组，即不包含元素和数据的数组。
delimiter
可选项。用于标识子字符串界限的字符。如果省略，使用空格 ("") 作为分隔符。如果 delimiter 为零长度字符串，则返回包含整个 expression 字符串的单元素数组。
count
可选项。被返回的子字符串数目，-1 指示返回所有子字符串。
Compare
可选项。指示在计算子字符串时使用的比较类型的数值。有关数值，请参阅“设置”部分。

设置

compare 参数可以有以下值：

常数 | 值 | 描述
vbBinaryCompare | 0 | 执行二进制比较。
vbTextCompare | 1 | 执行文本比较。

说明

下面的示例利用 Split 函数从字符串中返回数组。函数对分界符进行文本比较，返回所有的子字符串。

Dim MyString, MyArray, Msg
MyString = "VBScriptXisXfun!"
MyArray = Split(MyString, "x", -1, 1)
' MyArray(0) 包含 "VBScript"。
' MyArray(1) 包含 "is"。
' MyArray(2) 包含 "fun!"。
Msg = MyArray(0) & " " & MyArray(1)
Msg = Msg   & " " & MyArray(2)
MsgBox Msg

要求

版本 2

请参阅

Join 函数


Sqr 函数

返回数值的平方根。

Sqr(number)

number 参数可以是任意有效的大于或等于零的数值表达式。

说明

下面的示例利用 Sqr 函数计算数值的平方根：

Dim MySqr
MySqr = Sqr(4)   ' 返回 2。
MySqr = Sqr(23)   ' 返回4.79583152331272。
MySqr = Sqr(0)   ' 返回0。
MySqr = Sqr(-4)   ' 产生实时错误。

要求

版本 1


StrComp 函数

返回一个表明字符串比较结果的值。

StrComp(string1, string2[, compare])

参数

string1
必选项。任意有效的字符串表达式。
string2
必选项。任意有效的字符串表达式。
Compare
可选项。指示在计算字符串时使用的比较类型的数值。如果省略，则执行二进制比较。有关数值，请参阅“设置”部分。

设置

compare 参数可以有以下值：

常数 | 值 | 描述
vbBinaryCompare | 0 | 执行二进制比较。
vbTextCompare | 1 | 执行文本比较。

返回值

StrComp 函数有以下返回值：

如果 | StrComp 返回
string1 小于 string2 | -1
string1 等于 string2 | 0
string1 大于 string2 | 1
string1 或 string2 为 Null | Null

说明

下面的示例利用 StrComp 函数返回字符串比较的结果。如果第三个参数为 1 执行文本比较；如果第三个参数为 0 或者省略执行二进制比较。

Dim MyStr1, MyStr2, MyComp
MyStr1 = "ABCD": MyStr2 = "abcd"   '定义变量。
MyComp = StrComp(MyStr1, MyStr2, 1)   ' 返回 0。
MyComp = StrComp(MyStr1, MyStr2, 0)   ' 返回 -1。
MyComp = StrComp(MyStr2, MyStr1)   ' 返回 1。

要求

版本 1


String 函数

返回具有指定长度的、重复字符组成的字符串。

String(number, character)

参数

number
返回字符串的长度。如果 number 参数包含 Null，则返回 Null。
Character
指定字符或字符串表达式的字符代码，其中字符串表达式的第一个字符用于组成返回的字符串。如果 character 参数包含 Null，则返回 Null。

说明

如果指定的 character 值大于 255，则 String 使用下列公式将该数转换成有效的字符代码：

character Mod 256

下面的示例利用 String 函数返回指定长度的由重复字符组成的字符串：

Dim MyString
MyString = String(5, "*")   ' 返回"*****"。
MyString = String(5, 42)   ' 返回"*****"。
MyString = String(10, "ABC")   ' 返回"AAAAAAAAAA"。

要求

版本 1

请参阅

Space 函数


StrReverse 函数

返回字符串，此字符串与指定字符串顺序相反。

StrReverse(string1)

string1 参数是要进行字符反向的字符串。如果 string1 是零长度字符串 ("")，则返回零长度字符串。如果 string1 为 Null，则会出现错误。

说明

下面的示例利用 StrReverse 函数返回按相反顺序排列的字符串：

Dim MyStr
MyStr = StrReverse("VBScript") 'MyStr 包含 "tpircSBV"。

要求

版本 2


Tan 函数

返回某个角的正切值。

Tan(number)

number 参数可以是任何将某个角表示为弧度的有效数值表达式。

说明

Tan 取某个角并返回直角三角形两个直角边的比值。此比值是直角三角形中该角的对边长度与邻边长度之比。

将角度乘以 pi/180 即可转换为弧度，将弧度乘以 180/pi 即可转换为角度。

下面的示例利用 Tan 函数返回角度的正切：

Dim MyAngle, MyCotangent
MyAngle = 1.3   ' 用弧度定义角度。
MyCotangent = 1 / Tan(MyAngle)   ' 计算余切。

要求

版本 1

请参阅

Atn 函数 | Cos 函数 | 派生数学函数 | Sin 函数


Time 函数

返回 Date 子类型 Variant，指示当前系统时间。

Time

说明

下面的示例利用 Time 函数返回当前系统时间：

Dim MyTime
MyTime = Time   ' 返回当前系统时间。

要求

版本 1

请参阅

Date 函数


Timer 函数

返回午夜 12 时以后已经过去的秒数。

Timer

说明

下面的例子使用 Timer 函数来确定 For...Next 循环 N 次所需的时间：

Function TimeIt(N)
   Dim StartTime, EndTime
   StartTime = Timer
   For I = 1 To N
   Next
   EndTime = Timer
   TimeIt = EndTime - StartTime
End Function

要求

版本 5

请参阅

Randomize 语句


TimeSerial 函数

返回一个 Date 子类型的 Variant，含有指定时、分、秒的时间。

TimeSerial(hour,minute, second)

参数

hour
其值为从 0 (12:00 A.M.) 到 23 (11:00 P.M.) 的数值或数值表达式。
minute
任意数值表达式。
second
任意数值表达式。

说明

要指定一时刻，如 11:59:59，TimeSerial 的参数取值应在可接受的范围内；也就是说，小时应介于 0-23 之间，分和秒应介于 0-59 之间。但是，可以使用数值表达式为每个参数指定相对时间，这一表达式代表某时刻之前或之后的时、分或秒数。

下面的示例使用绝对时间数的表达式。TimeSerial 函数返回中午前 6（12-6）小时前的 15分钟 （-15）， 或 5:45:00 A.M.

Dim MyTime1
MyTime1 = TimeSerial(12 - 6, -15, 0) ' 返回 5:45:00 AM.

当任何一个参数的取值超出可接受的范围时，它会正确地进位到下一个较大的时间单位中。例如，如果指定了 75 分钟，则这个时间被解释成一小时十五分钟。但是，如果任何一个参数值超出 -32768 到 32767 的范围，就会导致错误。如果使用三个参数直接指定的时间或通过表达式计算出的时间超出可接受的日期范围，也会导致错误。

要求

版本 1

请参阅

DateSerial 函数 | DateValue 函数 | Hour 函数 | Minute 函数 | Now 函数 | Second 函数 | TimeValue 函数


TimeValue

返回包含时间的 Date 子类型的 Variant。

TimeValue(time)

time 参数通常是代表从 0:00:00 (12:00:00 A.M.) 到 23:59:59 (11:59:59 P.M.) 的字符串表达式（包括 0:00:00 和 23:59:59）。不过，time 也可以是代表该范围内任何时间的表达式。如果 time 参数包含 Null，则返回 Null。

说明

可以采用 12 或 24 小时时钟格式输入时间。例如 "2:24PM" 和 "14:24" 都是有效的 time 参数。如果 time 参数包含日期信息， TimeValue 函数并不返回日期信息。然而，如果 time 参数包含无效的日期信息，则会出现错误。

下面的示例利用 TimeValue 函数将字符串转化为时间。也可以用日期文字直接赋时间给 Variant 类型的变量(例如， MyTime = #4:35:17 PM#).

Dim MyTime
MyTime = TimeValue("4:35:17 PM")   ' MyTime 包含 "4:35:17 PM"。

要求

版本 1

请参阅

DateSerial 函数 | DateValue 函数 | Hour 函数 | Minute 函数 | Now 函数 | Second 函数 | TimeSerial 函数


TypeName 函数

返回一个字符串，提供有关变量的 Variant 子类型信息。

TypeName(varname)

必选项的 varname 参数，可以是任何变量。

返回值

TypeName 函数返回值如下：

值 | 描述
Byte | 字节值
Integer | 整型值
Long | 长整型值
Single | 单精度浮点值
Double | 双精度浮点值
Currency | 货币值
Decimal | 十进制值
Date | 日期或时间值
String | 字符串值
Boolean | Boolean 值；True 或 False
Empty | 未初始化
Null | 无有效数据
<object type> | 实际对象类型名
Object | 一般对象
Unknown | 未知对象类型
Nothing | 还未引用对象实例的对象变量
Error | 错误

说明

下面的示例利用 TypeName 函数返回变量信息：

Dim ArrayVar(4), MyType
NullVar = Null   ' 赋 Null 值。

MyType = TypeName("VBScript")   ' 返回 "String"。
MyType = TypeName(4)            ' 返回 "Integer"。
MyType = TypeName(37.50)        ' 返回 "Double"。
MyType = TypeName(NullVar)      ' 返回 "Null"。
MyType = TypeName(ArrayVar)     ' 返回 "Variant()"。

要求

版本 2

请参阅

IsArray 函数 | IsDate 函数 | IsEmpty 函数 | IsNull 函数 | IsNumeric 函数 | IsObject 函数 | VarType 函数


UBound 函数

返回指定数组维数的最大可用下标。

UBound(arrayname[, dimension])

参数

arrayname
必选项。数组变量名，遵循标准变量命名规则。
Dimension
可选项。指定返回哪一维上界的整数。1 表示第一维，2 表示第二维，以此类推。如果省略 dimension 参数，则默认值为 1。

说明

UBound 函数与 LBound 函数一起使用，用于确定数组的大小。使用 LBound 函数可以确定数组某一维的下界。

所有维的下界均为 0。对于有这样维数的数组，UBound 函数返回以下结果：

Dim A(100,3,4)
语句 | 返回值
UBound(A, 1) | 100
UBound(A, 2) | 3
UBound(A, 3) | 4

要求

版本 1

请参阅

Dim 语句 | LBound 函数 | ReDim 语句


UCase 函数

返回字符串的大写形式。

UCase(string)

string 参数是任意有效的字符串表达式。如果 string 参数中包含 Null，则返回 Null。

说明

只有小写字母被转换成大写字母；所有大写字母和非字母字符均保持不变。

下面的示例利用 UCase 函数返回字符串的大写形式：

Dim MyWord
MyWord = UCase("Hello World")   ' 返回"HELLO WORLD"。

要求

版本 1

请参阅

LCase 函数


VarType 函数

返回指示变量子类型的值。

VarType(varname)

varname 参数可以是任何变量。

返回值

VarType 函数返回下列值：

常数 | 值 | 描述
vbEmpty | 0 | Empty（未初始化）
vbNull | 1 | Null（无有效数据）
vbInteger | 2 | 整数
vbLong | 3 | 长整数
vbSingle | 4 | 单精度浮点数
vbDouble | 5 | 双精度浮点数
vbCurrency | 6 | 货币
vbDate | 7 | 日期
vbString | 8 | 字符串
vbObject | 9 | Automation 对象
vbError | 10 | 错误
vbBoolean | 11 | Boolean
vbVariant | 12 | Variant（只和变量数组一起使用）
vbDataObject | 13 | 数据访问对象
vbByte | 17 | 字节
vbArray | 8192 | 数组
注意 这些常数是由 VBScript 指定的。所以，这些名称可在代码中随处使用，以代替实际值。

说明

VarType 函数从不通过自己返回 Array 的值。它总是要添加一些其他值来指示一个具体类型的数组。当 Variant 的值被添加到 Array 的值中以表明 VarType 函数的参数是一个数组时，它才被返回。例如，对一个整数数组的返回值是 2 + 8192 的计算结果，或 8194。如果一个对象有默认属性，则 VarType(object) 返回对象默认属性的类型。

下面函数利用 VarType 函数决定变量的子类型.

Dim MyCheck
MyCheck = VarType(300)           ' 返回 2。
MyCheck = VarType(#10/19/62#)    ' 返回 7。
MyCheck = VarType("VBScript")    ' 返回 8。

要求

版本 1

请参阅

IsArray 函数 | IsDate 函数 | IsEmpty 函数 | IsNull 函数 | IsNumeric 函数 | IsObject 函数 | TypeName 函数


Weekday 函数

返回代表一星期中某天的整数。

Weekday(date, [firstdayofweek])

参数

date
可以代表日期的任意表达式。如果 date 参数中包含 Null，则返回 Null。
Firstdayofweek
指定星期中第一天的常数。如果省略，默认使用 vbSunday。

设置

firstdayofweek 参数有如下设置：

常数 | 值 | 描述
vbUseSystemDayOfWeek | 0 | 使用区域语言支持 (NLS) API 设置。
vbSunday | 1 | 星期日
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六

返回值

Weekday 函数返回如下值：

常数 | 值 | 描述
vbSundayDayOfWeek | 1 | 星期日
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六

说明

下面例子利用 Weekday 函数得到指定日期为星期几：

Dim MyDate, MyWeekDay
MyDate = #October 19, 1962#   ' 分派日期。
MyWeekDay = Weekday(MyDate)   ' 由于 MyWeekDay 包含 6,MyDate 代表星期五。

要求

版本 1

请参阅

Date 函数 | Day 函数 | Month 函数 | Now 函数 | Year 函数


WeekDayName 函数

返回一个字符串，表示星期中指定的某一天。

WeekdayName(weekday, abbreviate, firstdayofweek)

参数

weekday
必选项。星期中某天的数值定义。各天的数值定义取决于 firstdayofweek 参数设置。
Abbreviate
可选项。Boolean 值，指明是否缩写表示星期各天的名称。如果省略， 默认值为 False，即不缩写星期各天的名称。
Firstdayofweek
可选项。指明星期第一天的数值。关于数值，请参阅“设置”部分。

设置

firstdayofweek 参数有以下值：

常数 | 值 | 描述
vbUseSystemDayOfWeek | 0 | 使用区域语言支持 (NLS) API 设置。
vbSunday | 1 | 星期日（默认）
vbMonday | 2 | 星期一
vbTuesday | 3 | 星期二
vbWednesday | 4 | 星期三
vbThursday | 5 | 星期四
vbFriday | 6 | 星期五
vbSaturday | 7 | 星期六

说明

下面例子利用 WeekDayName 函数返回指定的某一天：

Dim MyDate
MyDate = WeekDayName(6, True)   'MyDate 包含 Fri。

要求

版本 2

请参阅

MonthName 函数


Year 函数

返回一个代表某年的整数。

Year(date)

date 参数是任意可以代表日期的参数。如果 date 参数中包含 Null，则返回 Null。

说明

下面例子利用 Year 函数得到指定日期的年份：

Dim MyDate, MyYear
MyDate = #October 19, 1962#   ' 分派一日期。
MyYear = Year(MyDate)         ' MyYear 包含 1962。

要求

版本 1

请参阅

Date 函数 | Day 函数 | Month 函数 | Now 函数 | Weekday 函数


VBScript 关键字

Empty

False

Nothing

Null

True

相关章节

VBScript 语言参考


Empty

Empty 关键字用于指明未初始化的变量值。此关键字与 Null 并不相同。

请参阅

Null


False

False 关键字的值为零。

请参阅

True


Nothing

在 VBScript 中，Nothing 关键字用于取消某对象变量与实际对象的关联。使用 Set 语句将对象变量赋值为 Nothing。例如：

Set MyObject = Nothing

多个对象变量可以引用同一个实际对象。当 Nothing 赋值给某对象变量后，此变量就不再引用任何实际对象。当多个对象变量引用同一个对象时，只有在所有对象变量都设置为 Nothing （在设置为 Nothing 的最后一个对象变量超出范围后，显式或隐式地使用 Set 命令）后，与变量所引用的对象相关联的内存和系统资源才被释放。

请参阅

Dim 语句 | Set 语句


Null

Null 关键字用于指明变量包含的数据无效。此关键字与 Empty 并不相同。

请参阅

Empty


True

True 关键字的值等于 -1。

请参阅

False


方法

本节内容

Clear 方法

Execute 方法

Raise 方法

Replace 方法

Test 方法

相关章节

VBScript 语言参考


Clear 方法

清除 Err 对象的所有属性设置。

object.Clear

object 应为 Err 对象的名称。

说明

在错误处理后，使用 Clear 显式地清除 Err 对象。此操作是必须的，例如使用 On Error Resume Next 延迟错误处理时。在任何时候执行下列语句，VBScript 自动调用 Clear 方法：

  • On Error Resume Next
  • Exit Sub
  • Exit Function

下面例子举例说明如何使用 Clear 方法。

  ’发生错误继续下一步
Err.Raise 6  '发生溢出错误。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear    ' 清除错误。

要求

版本 1

请参阅

Description 属性 | Err 对象 | Number 属性 | On Error 语句 | Raise 方法 | Source 属性

应用于：Err 对象


Execute 方法 (VBScript)

Visual Basic Scripting Edition

Execute 方法

对指定的字符串执行正则表达式搜索。

object.Execute(string)

参数

object
必选项。总是一个 RegExp 对象的名称。
string
必选项。要在其上执行正则表达式的文本字符串。

说明

正则表达式搜索的设计模式是通过 RegExp 对象的 Pattern 来设置的。

Execute 方法返回一个 Matches 集合，其中包含了在 string 中找到的每一个匹配的 Match 对象。如果未找到匹配，Execute 将返回空的 Matches 集合。

下面的代码说明了 Execute 方法的用法。

Function RegExpTest(patrn, strng)
  Dim regEx, Match, Matches      ' 创建变量。
  Set regEx = New RegExp         ' 创建正则表达式。
  regEx.Pattern = patrn          ' 设置模式。
  regEx.IgnoreCase = True         ' 设置为不区分大小写。
  regEx.Global = True         ' 设置全局适用。
  Set Matches = regEx.Execute(strng)   ' 执行搜索。
  For Each Match in Matches      ' 对 Matches 集合进行迭代。
    RetStr = RetStr & "Match found at position "
    RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
    RetStr = RetStr & Match.Value & "'." & vbCRLF
  Next
  RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 5

请参阅

Replace 方法 | Test 方法

应用于：RegExp 对象


Raise 方法

生成运行时错误。

object.Raise(number, source, description, helpfile, helpcontext)

参数

object
应为 Err 对象。
Number
Long 整数子类型，标识错误性质。VBScript 错误（有 VBScript 定义和用户定义两种错误）的范围在 0-65535 之间。
Source
命名最初产生错误的对象或应用程序的字符串表达式。当为 Automation 对象设置此属性时，请使用窗体 project.class。如未作任何指定，则使用当前 VBScript 项目的程序设计 ID。
Description
描述错误的字符串表达式。如未指定，则检查 number 的值。如可将其映射为 VBScript 运行时错误代码，则将 VBScript 提供的字符串作为 description 使用。如没有与 number 对应的 VBScript 错误，则使用通用错误信息。
Helpfile
Help 文件的完整合法的路径，在该 Help 文件中可找到此错误的帮助信息。如未指定，则 VBScript 将使用 VBScript Help 文件的完整合法的驱动器、路径和文件名。
Helpcontext
上下文 ID，标识 helpfile 中提供错误帮助的主题。如果省略，则使用与 number 属性对应的错误的 VBScript Help 文件上下文 ID（如果存在）。

说明

除了 number 以外的所有参数都是可选项的。如果使用 Raise，而不指定某些参数，且 Err 对象的属性设置含有未清除的值，则这些值将成为错误的值。

在 Automation 对象中设置错误代码的 number 属性时，请向常数 vbObjectError 添加错误代码编号。例如，要生成错误号 1050，可将 number 属性赋值为 vbObjectError + 1050 。

下面例子举例说明如何使用 Raise 方法:

On Error Resume Next
Err.Raise 6  '产生溢出错误。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear    '清除错误。

要求

版本 1

请参阅

Clear 方法 | 属性描述 | Err 对象 | Number 属性 | Source 属性

应用于：Err 对象


Replace 方法

替换在正则表达式查找中找到的文本。

object.Replace(string1, string2)

参数

object
必选项。总是一个 RegExp 对象的名称。
string1
必选项。string1 是将要进行文本替换的字符串。
string2
必选项。string2 是替换文本字符串。

说明

被替换的文本的实际模式是通过 RegExp 对象的 Pattern 属性设置的。

Replace 方法返回 string1 的副本，其中的 RegExp.Pattern 文本已经被替换为 string2。如果没有找到匹配的文本，将返回原来的 string1 的副本。

下面的例子说明了 Replace 方法的用法。

Function ReplaceTest(patrn, replStr)
  Dim regEx, str1               ' 建立变量。
  str1 = "The quick brown fox jumped over the lazy dog."
  Set regEx = New RegExp               ' 建立正则表达式。
  regEx.Pattern = patrn               ' 设置模式。
  regEx.IgnoreCase = True               ' 设置是否区分大小写。
  ReplaceTest = regEx.Replace(str1, replStr)         ' 作替换。
End Function

MsgBox(ReplaceTest("fox", "cat"))      ' 将 'fox' 替换为 'cat'。

；另外，Replace 方法在模式中替换 subexpressions 。下面对以前示例中函数的调用，替换了原字符串中的所有字对：

MsgBox(ReplaceText("(\S+)(\s+)(\S+)", "$3$2$1"))   ' 交换词对.

要求

版本 5

请参阅

Execute 方法 | Test 方法

应用于：RegExp 对象


Test 方法

对指定的字符串执行一个正则表达式搜索，并返回一个 Boolean 值指示是否找到匹配的模式。

object.Test(string)

参数

object
必选项。总是一个 RegExp 对象的名称。
string
必选项。要执行正则表达式搜索的文本字符串。

说明

正则表达式搜索的实际模式是通过RegExp对象的Pattern属性来设置的。RegExp.Global属性对Test方法没有影响。

如果找到了匹配的模式，Test方法返回True；否则返回False。

下面的代码说明了Test 方法的用法。

Function RegExpTest(patrn, strng)
  Dim regEx, retVal            ' 建立变量。
  Set regEx = New RegExp         ' 建立正则表达式。
  regEx.Pattern = patrn         ' 设置模式。
  regEx.IgnoreCase = False         ' 设置是否区分大小写。
  retVal = regEx.Test(strng)         ' 执行搜索测试。
  If retVal Then
    RegExpTest = "找到一个或多个匹配。"
  Else
    RegExpTest = "未找到匹配。"
  End If
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 5

请参阅

Execute 方法 | Replace 方法

应用于：RegExp 对象


杂项

本节内容

字符集 (0 - 127)

字符集 (128 - 255)

区域设置 ID (LCID) 表

相关章节

VBScript 语言参考


字符集 (0 - 127)

下表列出了字符集中的 0 - 127。

代码 | 字符 | 代码 | 字符 | 代码 | 字符 | 代码 | 字符
0 |  | 32 | [空格] | 64 | @ | 96 | `
1 |  | 33 | ! | 65 | A | 97 | a
2 |  | 34 | " | 66 | B | 98 | b
3 |  | 35 | # | 67 | C | 99 | c
4 |  | 36 | $ | 68 | D | 100 | d
5 |  | 37 | % | 69 | E | 101 | e
6 |  | 38 | & | 70 | F | 102 | f
7 |  | 39 | ' | 71 | G | 103 | g
8 | ** | 40 | ( | 72 | H | 104 | h
9 | ** | 41 | ) | 73 | I | 105 | i
10 | ** | 42 | * | 74 | J | 106 | j
11 |  | 43 | + | 75 | K | 107 | k
12 |  | 44 | , | 76 | L | 108 | l
13 | ** | 45 | - | 77 | M | 109 | m
14 |  | 46 | . | 78 | N | 110 | n
15 |  | 47 | / | 79 | O | 111 | o
16 |  | 48 | 0 | 80 | P | 112 | p
17 |  | 49 | 1 | 81 | Q | 113 | q
18 |  | 50 | 2 | 82 | R | 114 | r
19 |  | 51 | 3 | 83 | S | 115 | s
20 |  | 52 | 4 | 84 | T | 116 | t
21 |  | 53 | 5 | 85 | U | 117 | u
22 |  | 54 | 6 | 86 | V | 118 | v
23 |  | 55 | 7 | 87 | W | 119 | w
24 |  | 56 | 8 | 88 | X | 120 | x
25 |  | 57 | 9 | 89 | Y | 121 | y
26 |  | 58 | : | 90 | Z | 122 | z
27 |  | 59 | ; | 91 | [ | 123 | {
28 |  | 60 | < | 92 | \ | 124 | |
29 |  | 61 | = | 93 | ] | 125 | }
30 | - | 62 | > | 94 | ^ | 126 | ~
31 |  | 63 | ? | 95 | _ | 127 | 

** 数值 8、9、10 和 13 可以分别转换为退格符、制表符、换行符和回车符。这些字符都没有图形表示，但是对于不同的应用程序，这些字符可能会影响文本的显示效果。

 表示在当前平台上不支持的字符。

请参阅

字符集 (128 - 255)


字符集 (128 - 255)

下表列出了字符集中的 128 - 255。

代码 | 字符 | 代码 | 字符 | 代码 | 字符 | 代码 | 字符
128 | € | 160 | [空格] | 192 | À | 224 | à
129 |  | 161 | ¡ | 193 | Á | 225 | á
130 | ‚ | 162 | ¢ | 194 | Â | 226 | â
131 | ƒ | 163 | £ | 195 | Ã | 227 | ã
132 | „ | 164 | ¤ | 196 | Ä | 228 | ä
133 | … | 165 | ¥ | 197 | Å | 229 | å
134 | † | 166 | ¦ | 198 | Æ | 230 | æ
135 | ‡ | 167 | § | 199 | Ç | 231 | ç
136 | ˆ | 168 | ¨ | 200 | È | 231 | ç
137 | ‰ | 169 | © | 201 | É | 232 | è
138 | Š | 170 | ª | 202 | Ê | 233 | é
139 | ‹ | 171 | « | 203 | Ë | 234 | ê
140 | Œ | 172 | ¬ | 204 | Ì | 235 | ë
141 |  | 173 |  | 205 | Í | 236 | ì
142 | Ž | 174 | ® | 206 | Î | 237 | í
143 |  | 175 | ¯ | 207 | Ï | 238 | î
144 |  | 176 | ° | 208 | Ð | 239 | ï
145 | ‘ | 177 | ± | 209 | Ñ | 240 | ð
146 | ’ | 178 | ² | 210 | Ò | 241 | ñ
147 | “ | 179 | ³ | 211 | Ó | 242 | ò
148 | ” | 180 | ´ | 212 | Ô | 243 | ó
149 | • | 181 | µ | 213 | Õ | 244 | ô
150 | – | 182 | ¶ | 214 | Ö | 245 | õ
151 | — | 183 | · | 215 | × | 246 | ö
152 | ˜ | 184 | ¸ | 216 | Ø | 247 | ÷
153 | ™ | 185 | ¹ | 217 | Ù | 248 | ø
154 | š | 186 | º | 218 | Ú | 249 | ù
155 | › | 187 | » | 219 | Û | 250 | ú
156 | œ | 188 | ¼ | 220 | Ü | 251 | û
157 |  | 189 | ½ | 221 | Ý | 252 | ü
158 | ž | 190 | ¾ | 222 | Þ | 253 | ý
159 | Ÿ | 191 | ¿ | 223 | ß | 254 | þ

 表示在当前平台下不支持。

请参阅

字符集 (0 - 127)


区域设置 ID (LCID) 表

下表列出了区域设置 ID (LCID)。

区域设置描述 | 简写 | 十六进制值 | 十进制值 | 区域设置描述 | 简写 | 十六进制值 | 十进制值
南非荷兰语 | af | 0x0436 | 1078 | 冰岛语 | is | 0x040F | 1039
阿尔巴尼亚语 | sq | 0x041C | 1052 | 印度尼西亚语 | id | 0x0421 | 1057
阿拉伯语 - 阿拉伯联合酋长国 | ar-ae | 0x3801 | 14337 | 意大利语 - 意大利 | it-it | 0x0410 | 1040
阿拉伯语 - 巴林 | ar-bh | 0x3C01 | 15361 | 意大利语 - 瑞士 | it-ch | 0x0810 | 2064
阿拉伯语 - 阿尔及利亚 | ar-dz | 0x1401 | 5121 | 日语 | ja | 0x0411 | 1041
阿拉伯语 - 埃及 | ar-eg | 0x0C01 | 3073 | 朝鲜语 | ko | 0x0412 | 1042
阿拉伯语 - 伊拉克 | ar-iq | 0x0801 | 2049 | 拉脱维亚语 | lv | 0x0426 | 1062
阿拉伯语 - 约旦 | ar-jo | 0x2C01 | 11265 | 立陶宛语 | lt | 0x0427 | 1063
阿拉伯语 - 科威特 | ar-kw | 0x3401 | 13313 | FYRO 马其顿语 | mk | 0x042F | 1071
阿拉伯语 - 黎巴嫩 | ar-lb | 0x3001 | 12289 | 马来语 - 马来西亚 | ms-my | 0x043E | 1086
阿拉伯语 - 利比亚 | ar-ly | 0x1001 | 4097 | 马来语 - 文莱 | ms-bn | 0x083E | 2110
阿拉伯语 - 摩洛哥 | ar-ma | 0x1801 | 6145 | 马耳他语 | mt | 0x043A | 1082
阿拉伯语 - 阿曼 | ar-om | 0x2001 | 8193 | 马拉地语 | mr | 0x044E | 1102
阿拉伯语 - 卡塔尔 | ar-qa | 0x4001 | 16385 | 挪威语 - 博克马尔 | no-no | 0x0414 | 1044
阿拉伯语 - 沙特阿拉伯 | ar-sa | 0x0401 | 1025 | 挪威语 - 尼诺斯克 | no-no | 0x0814 | 2068
阿拉伯语 - 叙利亚 | ar-sy | 0x2801 | 10241 | 波兰语 | pl | 0x0415 | 1045
阿拉伯语 - 突尼斯 | ar-tn | 0x1C01 | 7169 | 葡萄牙语 - 葡萄牙 | pt-pt | 0x0816 | 2070
阿拉伯语 - 也门 | ar-ye | 0x2401 | 9217 | 葡萄牙语 - 巴西 | pt-br | 0x0416 | 1046
亚美尼亚语 | hy | 0x042B | 1067 | 拉托-罗马语 | rm | 0x0417 | 1047
阿泽里语 - 拉丁 | az-az | 0x042C | 1068 | 罗马尼亚语 | ro | 0x0418 | 1048
阿泽里语 - 西里尔语 | az-az | 0x082C | 2092 | 罗马尼亚语 - 摩尔多瓦 | ro-mo | 0x0818 | 2072
巴斯克语 | eu | 0x042D | 1069 | 俄语 | ru | 0x0419 | 1049
白俄罗斯语 | be | 0x0423 | 1059 | 俄语 - 摩尔多瓦 | ru-mo | 0x0819 | 2073
保加利亚语 | bg | 0x0402 | 1026 | 梵语 | sa | 0x044F | 1103
加泰罗尼亚语 | ca | 0x0403 | 1027 | 塞尔维亚语 - 西里尔语 | sr-sp | 0x0C1A | 3098
中文 - 中华人民共和国 | zh-cn | 0x0804 | 2052 | 塞尔维亚语 - 拉丁 | sr-sp | 0x081A | 2074
中文 - 中华人民共和国香港特别行政区 | zh-hk | 0x0C04 | 3076 | 茨瓦纳语 | tn | 0x0432 | 1074
中文 - 中华人民共和国澳门特别行政区 | zh-mo | 0x1404 | 5124 | 斯洛文尼亚语 | sl | 0x0424 | 1060
中文 - 新加坡 | zh-sg | 0x1004 | 4100 | 斯洛伐克语 | sk | 0x041B | 1051
中文 - 台湾地区 | zh-tw | 0x0404 | 1028 | 索布语 | sb | 0x042E | 1070
克罗地亚语 | hr | 0x041A | 1050 | 西班牙语 - 西班牙 | es-es | 0x0C0A | 1034
捷克语 | cs | 0x0405 | 1029 | 西班牙语 - 阿根廷 | es-ar | 0x2C0A | 11274
丹麦语 | da | 0x0406 | 1030 | 西班牙语 - 玻利维亚 | es-bo | 0x400A | 16394
荷兰语 | nl-nl | 0x0413 | 1043 | 西班牙语 - 智利 | es-cl | 0x340A | 13322
荷兰语 - 比利时 | nl-be | 0x0813 | 2067 | 西班牙语 - 哥伦比亚 | es-co | 0x240A | 9226
英语 - 澳大利亚 | en-au | 0x0C09 | 3081 | 西班牙语 - 哥斯达黎加 | es-cr | 0x140A | 5130
英语 - 伯利兹 | en-bz | 0x2809 | 10249 | 西班牙语 - 多米尼加共和国 | es-do | 0x1C0A | 7178
英语 - 加拿大 | en-ca | 0x1009 | 4105 | 西班牙语 - 厄瓜多尔 | es-ec | 0x300A | 12298
英语 - 加勒比地区 | en-cb | 0x2409 | 9225 | 西班牙语 - 危地马拉 | es-gt | 0x100A | 4106
英语 - 爱尔兰 | en-ie | 0x1809 | 6153 | 西班牙语 - 洪都拉斯 | es-hn | 0x480A | 18442
英语 - 牙买加 | en-jm | 0x2009 | 8201 | 西班牙语 - 墨西哥 | es-mx | 0x080A | 2058
英语 - 新西兰 | en-nz | 0x1409 | 5129 | 西班牙语 - 尼加拉瓜 | es-ni | 0x4C0A | 19466
英语 – 菲律宾 | en-ph | 0x3409 | 13321 | 西班牙语 - 巴拿马 | es-pa | 0x180A | 6154
英语 - 南非 | en-za | 0x1C09 | 7177 | 西班牙语 - 秘鲁 | es-pe | 0x280A | 10250
英语 - 特立尼达岛 | en-tt | 0x2C09 | 11273 | 西班牙语 - 波多黎各 | es-pr | 0x500A | 20490
英语 - 英国 | en-gb | 0x0809 | 2057 | 西班牙语 - 巴拉圭 | es-py | 0x3C0A | 15370
英语 - 美国 | en-us | 0x0409 | 1033 | 西班牙语 - 萨尔瓦多 | es-sv | 0x440A | 17418
爱沙尼亚语 | et | 0x0425 | 1061 | 西班牙语 - 乌拉圭 | es-uy | 0x380A | 14346
波斯语 | fa | 0x0429 | 1065 | 西班牙语 - 委内瑞拉 | es-ve | 0x200A | 8202
芬兰语 | fi | 0x040B | 1035 | 苏图语 | sx | 0x0430 | 1072
法罗语 | fo | 0x0438 | 1080 | 斯瓦希里语 | sw | 0x0441 | 1089
法语 - 法国 | fr-fr | 0x040C | 1036 | 瑞典语 | sv-se | 0x041D | 1053
法语 - 比利时 | fr-be | 0x080C | 2060 | 瑞典语 - 芬兰 | sv-fi | 0x081D | 2077
法语 - 加拿大 | fr-ca | 0x0C0C | 3084 | 泰米尔语 | ta | 0x0449 | 1097
法语 - 卢森堡 | fr-lu | 0x140C | 5132 | 鞑靼语 | tt | 0X0444 | 1092
法语 - 瑞士 | fr-ch | 0x100C | 4108 | 泰语 | th | 0x041E | 1054
盖尔语 - 爱尔兰 | gd-ie | 0x083C | 2108 | 土耳其语 | tr | 0x041F | 1055
盖尔语 - 苏格兰 | gd | 0x043C | 1084 | 汤加语 | ts | 0x0431 | 1073
德语 - 德国 | de-de | 0x0407 | 1031 | 乌克兰语 | uk | 0x0422 | 1058
德语 - 奥地利 | de-at | 0x0C07 | 3079 | 乌尔都语 - 巴基斯坦 | ur | 0x0420 | 1056
德语 - 列支敦士登 | de-li | 0x1407 | 5127 | 乌兹别克语 - 西里尔 | uz-uz | 0x0843 | 2115
德语 - 卢森堡 | de-lu | 0x1007 | 4103 | 乌兹别克语 - 拉丁 | uz-uz | 0x0443 | 1091
德语 - 瑞士 | de-ch | 0x0807 | 2055 | 越南语 | vi | 0x042A | 1066
希腊语 | el | 0x0408 | 1032 | 科萨语 | xh | 0x0434 | 1076
希伯来语 | he | 0x040D | 1037 | 意第绪语 | yi | 0x043D | 1085
印地语 | hi | 0x0439 | 1081 | 祖鲁语 | zu | 0x0435 | 1077
匈牙利语 | hu | 0x040E | 1038 |  |  |  |


对象和集合

本节内容

Class 对象

Err 对象

Matches 集合

Match 对象

正则表达式 (RegExp) 对象

SubMatches 集合

相关章节

VBScript 语言参考


Class 对象

使用 Class 语句创建的对象。提供了对类的各种事件的访问。

说明

不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中，“类对象”一词指的是用 VBScript Class 语句定义的任何对象。

在使用 Class 语句建立了类定义之后，可以用下面的形式创建类的一个实例：

Dim X
Set X = New classname

由于 VBScript 是一种后期约束型语言，下面的做法是不允许的：

Dim X as New classname

-或-

Dim X
X = New classname

-或-

Set X = New Scripting.FileSystemObject

事件

Class 对象的事件

要求

版本 5

请参阅

Class 语句 | Dim 语句 | Set 语句


Class 对象事件

Visual Basic Scripting Edition

Class 对象的事件

Class 对象提供对类的事件的访问。

事件

Initialize 事件

Terminate 事件


Matches 集合

正则表达式 Match 对象的集合。

说明

Matches 集合中包含若干独立的 Match 对象，只能使用 RegExp 对象的 Execute 方法来创建之。与独立的 Match 对象属性相同，Matches `集合的一个属性是只读的。

在执行正则表达式时，可能产生零个或多个 Match 对象。每个 Match 对象都提供了与正则表达式匹配的字符串的访问入口、字符串的长度，以及标识匹配位置的索引。

下面的代码将说明如何使用正则表达式查找获得 Matches 集合，以及如何循环遍历集合：

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 创建变量。
   Set regEx = New RegExp   ' 创建正则表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置是否区分大小写。
   regEx.Global = True   ' 设置全程匹配。
   Set Matches = regEx.Execute(strng)   ' 执行搜索。
   For Each Match in Matches   ' 循环遍历Matches集合。
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 1

请参阅

For Each...Next 语句 | Match 对象 | RegExp 对象 | SubMatches 集合


Err 对象

含有关于运行时错误的信息。接受用于生成和清除运行时错误的 Raise 和 Clear 方法。

说明

Err 对象是一个具有全局范围的内部对象：不必在您的代码中创建它的实例。Err的属性被一个错误的生成器设置：Visual Basic,自动对象，或 VBScript 程序。

Err 对象的默认属性是 number。Err.Number 含有一个整数，且可由 Automation 对象使用以返回 SCODE。

当发生运行时错误时，Err 的属性由标识错误的唯一信息以及可用于处理它的信息填充。要在代码中生成运行时错误，请用 Raise 方法。

Err 对象属性被重新设置为零或零长度字符串 ("")。Clear 方法可被用于显式地重新设置 Err。

下面的示例说明了 Err 对象的用法：

On Error Resume Next
Err.Raise 6   '产生溢出错误。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear   '清除错误。

属性和方法

Err 对象的属性和方法

要求

版本 1

请参阅

On Error 语句


Err 对象的属性和方法

Err 对象包含有关运行时错误的信息。

属性

Description 属性

HelpContext 属性

HelpFile 属性

Number 属性

Source 属性

方法

Clear 方法

Raise 方法


Match 对象

提供了对正则表达式匹配的只读属性的访问。

说明

Match 对象只能通过 RegExp 对象的 Execute 方法来创建，该方法实际上返回了 Match 对象的集合。所有的 Match 对象属性都是只读的。

在执行正则表达式时，可能产生零个或多个 Match 对象。每个 Match 对象提供了被正则表达式搜索找到的字符串的访问、字符串的长度，以及找到匹配的索引位置等。

下面的代码说明了 Match 对象的用法：

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立变量。
   Set regEx = New RegExp   ' 建立正则表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置是否区分大小写。
   regEx.Global = True   ' 设置全局替换。
   Set Matches = regEx.Execute(strng)   ' 执行搜索。
   For Each Match in Matches   ' 遍历 Matches 集合。
      RetStr = RetStr & "Match " & I & " found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is "'
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

属性

Match 对象的属性

要求

版本 5

请参阅

Matches 集合 | RegExp 对象 | SubMatches 集合


Match 对象属性

Visual Basic Scripting Edition

Match 对象的属性

Match 对象提供对正则表达式匹配的只读属性的访问。

属性

FirstIndex 属性

Length 属性

Value 属性


正则表达式 (RegExp) 对象

Visual Basic Scripting Edition

正则表达式(RegExp)对象

提供简单的正则表达式支持功能。

说明

下面的代码说明了RegExp对象的用法：

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立变量。
   Set regEx = New RegExp   ' 建立正则表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置是否区分字符大小写。
   regEx.Global = True   ' 设置全局可用性。
   Set Matches = regEx.Execute(strng)   ' 执行搜索。
   For Each Match in Matches   ' 遍历匹配集合。
      RetStr = RetStr & "Match found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

属性和方法

正则表达式对象的属性和方法

要求

版本 5

请参阅

Match 对象 | Matches 集合


正则表达式对象的属性和方法

正则表达式对象提供对简单正则表达式的支持。

属性

Global 属性

IgnoreCase 属性

Pattern 属性

方法

Execute 方法

Replace 方法

Test 方法


SubMatches 集合

正则表达式子匹配字符串的集合。

说明

SubMatches 集合包含了单个的子匹配字符串，只能用 RegExp 对象的 Execute 方法创建。SubMatches 集合的属性是只读的。

运行一个正则表达式时，当圆括号中捕捉到子表达式时可以有零个或多个子匹配。SubMatches 集合中的每一项是由正则表达式找到并捕获的的字符串。

下面的代码演示了如何从一个正则表达式获得一个 SubMatches 集合以及如何它的专有成员：

Function SubMatchTest(inpStr)
  Dim oRe, oMatch, oMatches
  Set oRe = New RegExp
  ' 查找一个电子邮件地址（不是一个理想的 RegExp）
  oRe.Pattern = "(\w+)@(\w+)\.(\w+)"
  ' 得到 Matches 集合
  Set oMatches = oRe.Execute(inpStr)
  ' 得到 Matches 集合中的第一项
  Set oMatch = oMatches(0)
  ' 创建结果字符串。
  ' Match 对象是完整匹配 — dragon@xyzzy.com
  retStr = "电子邮件地址是： " & oMatch & vbNewline
  ' 得到地址的子匹配部分。
  retStr = retStr & "电子邮件别名是： " & oMatch.SubMatches(0)  ' dragon
  retStr = retStr & vbNewline
  retStr = retStr & "组织是： " & oMatch. SubMatches(1)' xyzzy
  SubMatchTest = retStr
End Function

MsgBox(SubMatchTest("请写信到 dragon@xyzzy.com 。谢谢！"))

要求

版本 5.5

请参阅

For Each...Next 语句 | Match 对象 | Matches 集合 |RegExp 对象


运算符

本节内容

运算符优先级

运算符总结

算术运算符

比较运算符

连接运算符

逻辑运算符

相关章节

VBScript 语言参考


运算符优先级 (VBScript)

Visual Basic Scripting Edition

运算符优先级

在一个表达式中进行多个运算时，每一部分都会按预先确定的顺序进行计算求解，这个顺序被称为运算符优先级。括号可改变优先级的顺序，强制优先处理表达式的某部分。括号内的操作总是比括号外的操作先被执行。但是在括号内，仍保持正常的运算符优先级。

当表达式有多种运算符时，先处理算术运算符，接着处理比较运算符，然后再处理逻辑运算符。所有比较运算符有相同的优先级，即按它们出现的顺序从左到右进行处理。算术运算符和逻辑运算符按下列优先级进行处理：

算术 | 比较 | 逻辑
指数运算 (^) | 相等 (=) | Not
负数 (-) | 不等 (<>) | And
乘法和除法 (*, /) | 小于 (<) | Or
整除 (\) | 大于 (>) | Xor
求余运算 (Mod) | 小于或等于 (<=) | Eqv
加法和减法 (+, -) | 大于或等于 (>=) | Imp
字符串连接 (&) | Is | &

当乘法和除法同时出现在表达式中时，按照从左到右出现的顺序处理每个运算符。同样，当加法和减法同时出现在表达式中时，也按照从左到右出现的顺序处理每个运算符。

字符串连接运算符 (&) 不是算术运算符，但是就其优先级而言，它在所有算术运算符之后，而在所有比较运算符之前。Is 运算符是对象引用的比较运算符，它并不比较对象或对象的值，而只判断两个对象引用是否引用了相同的对象。

要求

版本 1

请参阅

Is 运算符 | 运算符总结


运算符总结 (VBScript)

Visual Basic Scripting Edition

运算符总结

算术运算符
用于执行数学计算的运算符。

赋值运算符
运算符用于为变量或属性赋值。

比较运算符
用于执行比较操作的运算符。

连接运算符
用于连接字符串的运算符。

逻辑运算符
用于执行逻辑操作的运算符。

请参阅

运算符优先级


加法运算符 (+) (VBScript)

Visual Basic Scripting Edition

加法运算符(+)

计算两个数之和。

result = expression1 + expression2

参数

result
任意数值变量。
expression1
任意表达式。
expression2
任意表达式。

说明

虽然也可以使用 + 运算符连接两个字符串，但是您仍应使用 & 运算符进行字符串的连接以避免混淆，提供易理解的代码。

这是因为在使用 + 运算符时，有可能无法确定是做加法还是做字符串连接。

表达式的基本子类型决定了 + 运算符所做的操作，如下表所示：

如果 | 则
两个表达式都是数值 | 相加
两个表达式都是字符串 | 连接
一个表达式是数值，另一个表达式是字符串 | 相加

如果一个表达式或两个表达式都为 Null 表达式，则 result 为 Null。如果两个表达式都为Empty，则 result 为 Integer 子类型。但是如果一个表达式为 Empty，则返回另一个表达式作为 result。

要求

版本 1

请参阅

& 运算符 | - 运算符 | 算术运算符 | 连接运算符 | 运算符优先级 | 运算符总结


And 运算符

对两个表达式进行逻辑“与”运算。

result = expression1 And expression2

参数

result
任意数值变量。
expression1
任意表达式。
expression2
任意表达式。

说明

当且仅当两个表达式均为 True，则 result 为 True。如果任一表达式为 False，则 result 为 False。下表说明如何确定 result：

如果 expression1 为 | 且 expression2 为 | 则 result 为
True | True | True
True | False | False
True | Null | Null
False | True | False
False | False | False
False | Null | False
Null | True | Null
Null | False | False
Null | Null | Null

And 运算符还对两个数值表达式中位置相同的位执行逐位比较，并根据下表设置 result 中相应的位：

如 expression1 中的位是 | 且 expression2 中的位是 | 则 result 为
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

要求

版本 1

请参阅

逻辑运算符 | Not 运算符 | 运算符优先级 | 运算符总结 | Or 运算符 | Xor 运算符


赋值运算符 (=) (VBScript)

Visual Basic Scripting Edition

赋值运算符 (=)

赋值给一个变量或属性。

variable = value

参数

variable
任何变量或可写的属性。
value
任何数值或字符串文字、常数或表达式。

说明

等号左边的名称可以是一个简单的标量变量或数组的一个元素。等号左边的属性仅可以是那些在运行时可写的属性。

要求

版本 1

请参阅

比较运算符 | 运算符优先级 | 运算符总结 | Set 语句


连接运算符 (&)

强制两个表达式进行字符串连接。

result = expression1 & expression2

参数

result
任意变量。
expression1
任意表达式。
expression2
任意表达式。

说明

任一 expression 不是字符串时，它将被转换为 String 子类型。如果两个表达式都为 Null，result 也为 Null。然而，如果仅有一个 expression 为 Null，则它和其他表达式连接时，按零长度字符串("") 处理。任何表达式为 Empty 时也按零长度字符串处理。

要求

版本 1

请参阅

连接运算符 | 运算符优先级 | 运算符总结


除法运算符 (/) (VBScript)

Visual Basic Scripting Edition

除法运算符 (/)

两个数值相除并返回以浮点数表示的结果。

result = number1/number2

参数

result
任意数值变量。
number1
任意数值表达式。
number2
任意数值表达式。

说明

如果一个或两个表达式为 Null 表达式，result 为 Null。任何表达式为 Empty 时，则按 0 处理。

要求

版本 1

请参阅

* 运算符 | 整除运算符 (\) | 算术运算符 | 运算符优先级 | 运算符总结


Eqv 运算符

执行两个表达式的逻辑等价运算。

result = expression1 Eqv expression2

参数

result
任意数值变量。
expression1
任意表达式。
expression2
任意表达式。

说明

如果任一表达式为 Null，则 result 也为 Null。当两个表达式都不为 Null 时，则 result 的值根据下表确定：

如果 expression1 为 | 且 expression2 为 | result 为
True | True | True
True | False | False
False | True | False
False | False | True

Eqv 运算符执行两个数值表达式相应位的逐位比较，并按下表设置 result 相应位：

如 expression1 中的位是 | 且 expression2 中的位是 | result 为
0 | 0 | 1
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1

要求

版本 1

请参阅

Imp 运算符 | 逻辑运算符 | 运算符优先级 | 运算符总结


幂运算符 (^)

计算数的指数次方。

result = number^exponent

参数

result
任意数值变量。
number
任意数值表达式。
exponent
任意数值表达式。

说明

仅当 exponent 参数为整数时，Number 参数才可为负值。如果单个表达式中有多个指数运算，则 ^ 运算符按从左到右的顺序执行。

如果 number 或 exponent 为 Null 表达式，则 result 值也为 Null。

要求

版本 1

请参阅

算术运算符 | 运算符优先级 | 运算符总结


Imp 运算符

对两个表达式进行逻辑隐含运算。

result = expression1 Imp expression2

参数

result
任意数值变量。
expression1
任意表达式。
expression2
任意表达式。

说明

下表显示如何确定 result 的取值：

如果 expression1 为 | 且 expression2 为 | 则 result 为
True | True | True
True | False | False
True | Null | Null
False | True | True
False | False | True
False | Null | True
Null | True | True
Null | False | Null
Null | Null | Null

Imp 运算符执行两个数值表达式相应位的逐位比较，并按下表设置 result 相应位：

如 expression1 中的位是 | 且 expression2 中的位是 | 则 result 为
0 | 0 | 1
0 | 1 | 1
1 | 0 | 0
1 | 1 | 1

要求

版本 1

请参阅

Eqv 运算符 | 逻辑运算符 | 运算符优先级 | 运算符总结


整除运算符 (\)

两个数相除并返回以整数形式表示的结果。

result = number1\number2

参数

result
任意数值变量。
number1
任意数值表达式。
number2
任意数值表达式。

说明

在除法操作前，数值表达式四舍五入为 Byte、Integer 或 Long 子类型表达式。

如果任何表达式为 Null，result 也是 Null。任何表达式为 Empty 时，则按 0 处理。

要求

版本 1

请参阅

* 运算符 | / 运算符 | 算术运算符 | 运算符优先级 | 运算符总结


Is 运算符

比较两个对象引用变量。

result = object1 Is object2

参数

result
任意数值变量。
object1
任意对象名。
object2
任意对象名。

说明

如果 object1 和 object2 都引用同一个对象，则 result 为 True；否则 result 为 False。可以使用许多方法使两个变量引用同一个对象。

在下列代码中，使 A 引用的对象与 B 的对象相同：

Set A = B

在下列代码中使 A 与 B 引用的对象与 C 的对象相同：

Set A = C
Set B = C

要求

版本 1

请参阅

比较运算符 | 运算符优先级 | 运算符总结


Mod 运算符

两个数值相除并返回其余数。

result = number1 Mod number2

参数

result
任意数值变量。
number1
任意数值表达式。
number2
任意数值表达式。

说明

模数或余数。运算符执行 number1 除以 number2 操作（浮点数四舍五入为整数）并只返回余数作为 result。例如，在下面的表达式中， A（为 result）等于 5。

A = 19 Mod 6.7

如果任一表达式为 Null，则 result 也为 Null。任一表达式为 Empty 时按 0 来处理。

要求

版本 1

请参阅

算术运算符 | 运算符优先级 | 运算符总结


乘运算符 (*) (VBScript)

Visual Basic Scripting Edition

乘法运算符 (*)

两个数相乘。

result = number1*number2

参数

result
任意数值变量。
number1
任意数值表达式。
number2
任意数值表达式。

说明

如果一个或两个表达式为 Null 表达式，result 为 Null。如果一个表达式为 Empty，则按 0 处理。

要求

版本 1

请参阅

整除运算符 (\) | 算术运算符 | 运算符优先级 | 运算符总结


Not 运算符

对表达式执行逻辑非运算。

result = Not expression

参数

result
任意数值变量。
expression
任意表达式。

说明

下表显示如何确定 result 的值：

如果 expression 为 | 则 result 为
True | False
False | True
Null | Null

此外，Not 运算符将变量的位取反，并按下表设置 result 的相应位：

expression 中的位 | result 中的位
0 | 1
1 | 0

要求

版本 1

请参阅

And 运算符 | 逻辑运算符 | 运算符优先级 | 运算符总结 | Or 运算符 | Xor 运算符


Or 运算符

对两个表达式进行逻辑“或”运算。

result = expression1 Or expression2

参数

result
任意数值变量。
expression1
任意表达式。
expression2
任意表达式。

说明

如果两个表达式中至少有一个为 True，则 result 为 True。下表说明如何确定 result：

如果 expression1 为 | expression2 为 | 则 result 为
True | True | True
True | False | True
True | Null | True
False | True | True
False | False | False
False | Null | Null
Null | True | True
Null | False | Null
Null | Null | Null

Or 运算符还对两个数值表达式中位置相同的位执行逐位比较，并根据下表设置 result 中相应的位：

如果 expression1 中的位是 | expression2 中的位是 | 则 result 为
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1

要求

版本 1

请参阅

And 运算符 | 逻辑运算符 | Not 运算符 | 运算符优先级 | 运算符总结 | Xor 运算符


减运算符 (-) (VBScript)

Visual Basic Scripting Edition

减法运算符 (-)

计算两个数值的差或表示数值表达式的负值。

语法 1

result = number1-number2

语法 2

-number

参数

result
任意数值变量。
number
任意数值表达式。
number1
任意数值表达式。
number2
任意数值表达式。

说明

在语法 1 中，- 运算符是用于计算两个数值差值的算术减法运算符。在语法 2 中，- 运算符用作单目求反运算符，表示表达式的负数。

如果一个或两个表达式都是 Null表达式，则 result 为 Null。如果某个表达式为 Empty，则按 0 值处理。

要求

版本 1

请参阅

+ 运算符 | 算术运算符 | 运算符优先级 | 运算符总结


Xor 运算符

对两个表达式进行逻辑“异或”运算。

result = expression1 Xor expression2

参数

result
任意数值变量。
expression1
任意表达式。
expression2
任意表达式。

说明

如果有且仅有一个表达式为 True，则 result 为 True。但是，如果任意一个表达式为 Null，则 result 也为 Null。若两个表达式均不为 Null，则根据下表确定 result：

如果 expression1 为 | expression2 为 | 则 result 为
True | True | False
True | False | True
False | True | True
False | False | False

Xor 运算符还可以对两个数值表达式中位置相同的位执行逐位比较，并根据下表设置 result 中相应的位：

如果 expression1 中的位是 | expression2 中的位是 | 则 result 为
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0

要求

版本 1

请参阅

And 运算符 | 逻辑运算符 | Not 运算符 | 运算符优先级 | 运算符总结 | Or 运算符


算术运算符

^ 运算符

* 运算符

/ 运算符

\ 运算符

Mod 运算符

+ 运算符

- 运算符

连接运算符


比较运算符 (VBScript)

Visual Basic Scripting Edition

比较运算符

用于比较表达式。

result = expression1 comparisonoperator expression2
result = object1 Is object2

参数

result
任意数值。
expression
任何表达式。
comparisonoperator
任何比较运算符。
object
任何对象名称。

说明

Is 运算符具有特殊的比较功能，它不同于下表中的运算符。下表包含一个比较运算符的列表，以及确定 result 为 True, False, 或 Null 的条件。

运算符 | 描述 | True 如果 | false 如果 | Null 如果
< | 小于 | expression1 < expression2 | expression1 >= expression2 | expression1 or expression2 = Null
<= | 小于或等于 | expression1 <= expression2 | expression1 > expression2 | expression1 or expression2 = Null
> | 大于 | expression1 > expression2 | expression1 <= expression2 | expression1 or expression2 = Null
>= | 大于或等于 | expression1 >= expression2 | expression1 < expression2 | expression1 or expression2 = Null
= | 等于 | expression1 = expression2 | expression1 <> expression2 | expression1 or expression2 = Null
<> | 不等于 | expression1 <> expression2 | expression1 = expression2 | expression1 or expression2 = Null

当比较两个表达式时，您或许不容易确定比较的表达式是作为数值或作为字符串。

下表描述了如何对表达式进行比较、以及比较的结果,它取决于比较的子类型。

如果 | 则
两个表达式都是数值 | 执行数值比较。
两个表达式都是字符串 | 执行字符串比较。
一个表达式是数值，加一个表达式是字符串 | 数值表达式小于字符串表达式。
一个表达式为 Empty 而另一个为数值 | 执行数值比较，0 作为 Empty 表达式的值。
一个表达式为Empty 而另一个表达式为字符串 | 执行字符串比较，零长度的字符串 ("") 作为 Empty 表达式的值。
两个表达式都为 Empty | 则两个表达式相等。

要求

版本 1

请参阅

= 运算符 | Is 运算符 | 运算符优先级 | 运算符总结


连接运算符

& 运算符

+ 运算符


逻辑运算符

And 运算符

Not 运算符

Or 运算符

Xor 运算符


属性

本节内容

Description 属性

FirstIndex 属性

Global 属性

HelpContext 属性

HelpFile 属性

IgnoreCase 属性

Length 属性

Number 属性

Pattern 属性

Source 属性

Value 属性

相关章节

VBScript 语言参考


Description 属性 (VBScript)

Visual Basic Scripting Edition

Description 属性

返回或设置与错误相关联的说明性字符串。

object.Description [= stringexpression]

参数

object
Err 对象。
stringexpression
包含错误说明的字符串表达式。

说明

Description 属性包含错误的简短说明。此属性用于提示用户注意您不能或不想处理的错误。当产生一个用户定义的错误时，将此错误的简要说明赋值给此属性。如果未填充 Description 属性并且 Number 的值对应于 VBScript 运行时错误，则返回有关错误的说明性字符串。

On Error Resume Next
Err.Raise 6   '产生溢出错误。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear   '清除错误。

要求

版本 1

请参阅

Err 对象 | HelpContext 属性 | HelpFile 属性 | Number 属性 | Source 属性

应用于：Err 对象


FirstIndex 属性

返回在搜索字符串中匹配的位置。

object.FirstIndex

object 参数总是一个 Match 对象。

说明

FirstIndex 属性使用从零起算的偏移量，该偏移量是相对于搜索字符串的起始位置而言的。换言之，字符串中的第一个字符被标识为字符 0。下面的例子说明了 FirstIndex 属性的用法：

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立变量。
   Set regEx = New RegExp   ' 建立正则表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置是否区分大小写。
   regEx.Global = True      ' 设置全局可用性。
   Set Matches = regEx.Execute(strng)      ' 执行搜索。
   For Each Match in Matches   ' 遍历 Matches 集合。
      RetStr = RetStr & "匹配 " & I & " 位于 "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is "'
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 5

请参阅

Length 属性 | Value 属性

应用于：Match 对象


Global 属性 (VBScript)

Visual Basic Scripting Edition

Global 属性

设置或返回一个 Boolean 值，该值指明在整个搜索字符串时模式是全部匹配还是只匹配第一个。

object.Global [= True | False ]

对象 参数总是 RegExp 对象。如果搜索应用于整个字符串，Global 属性的值为 True，否则其值为 False。默认的设置为 False。

说明

下面的代码说明了 Global 属性的用法（改变赋予 Global 属性的值并观察其效果）：

Function RegExpTest(patrn, strng)
   Dim regEx ,match,matches   ' 建立变量。
   Set regEx = New RegExp   ' 建立规范表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置是否区分字母的大小写。
   regEx.Global = True   ' 设置全程性质。
   set matches= regEx.Execute(strng)   ' 执行搜索。
   for each match in matches      ' 重复匹配集合
      RetStr=RetStr &"Match found at position "
      RetStr=RetStr&Match.FirstIndex&".Match Value is '"
      RetStr=RetStr&Match.Value&"'."&vbCRLF
   Next
   RegExpTest=RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 5

请参阅

IgnoreCase 属性 | Pattern 属性

应用于：RegExp 对象


HelpContext 属性

设置或返回帮助文件主题的上下文 ID。

object.HelpContext [= contextID]

参数

object
必选项。Err 对象。
contextID
可选项。在帮助文件中帮助主题的有效标识符。

说明

如果在 HelpFile 中指定帮助文件，则 HelpContext 属性用于自动显示标识的帮助主题。如果 HelpFile 和 HelpContext 都为空，则检查 Number 属性。如果它对应于 VBScript 运行时错误值，则使用该错误的 VBScript Help 上下文 ID 。如果 Number 属性不对应于 VBScript 错误，则显示 VBScript Help 文件的目录。

下面例子举例说明如何使用 HelpContext 属性:

On Error Resume Next
Dim Msg
Err.Clear
Err.Raise 6   ' 发生“溢出”错误。
Err.Helpfile = "yourHelp.hlp"
Err.HelpContext = yourContextID
If Err.Number <> 0 Then
   Msg = "按下 F1 键或 Help 查看" & Err.Helpfile & " 与下列 HelpContext " & _
   " 有关的主题: " & Err.HelpContext
   MsgBox Msg, , "错误: " & Err.Description, Err.Helpfile, Err.HelpContext
End If

要求

版本 2

请参阅

Description 属性 | HelpFile 属性 | Number 属性 | Source 属性

应用于：Err 对象


HelpFile 属性

设置或返回帮助文件的完整有效路径。

object.HelpFile [= contextID]

参数

object
必选项。Err 对象。
contextID
可选项。帮助文件的完整有效路径。

说明

如果在 HelpFile 中指定帮助文件，则当用户在错误信息对话框中单击帮助按钮（或按 F1 键）时，自动调用此文件。如果 HelpContext 属性包含指定文件的有效上下文 ID ，则自动显示该主题。如果未指定 HelpFile，则显示 VBScript Help 文件。

On Error Resume Next
Dim Msg
Err.Clear
Err.Raise 6   '产生“溢出”错误。
Err.Helpfile = "yourHelp.hlp"
Err.HelpContext = yourContextID
If Err.Number <> 0 Then
   Msg = "按下 F1 键或 Help 查看" & Err.Helpfile & "与下列 HelpContext " & _
   " 有关的主题: " & Err.HelpContext
   MsgBox Msg, , "错误: " & Err.Description, Err.Helpfile, Err.HelpContext
End If

要求

版本 2

请参阅

Description 属性 | HelpContext 属性 | Number 属性 | Source 属性

应用于：Err 对象


IgnoreCase 属性

设置或返回一个Boolean值，指明模式搜索是否区分大小写。

object.IgnoreCase [= True | False ]

Object 参数总是一个 RegExp 对象。如果搜索是区分大小写的，则 IgnoreCase 属性为 False；否则为 True。缺省值为 False。

说明

下面的代码说明了 IgnoreCase 属性的用法（改变赋予 IgnoreCase 属性的值以观察其效果)：

Function RegExpTest(patrn, strng)
   Dim regEx,Match,Matches   ' 建立变量。
   Set regEx = New RegExp   ' 建立正则表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置不区分大小写。
   regEx.Global=True   ' 设置全局可用性
   set matches=regExExecute(string )   ' 执行搜索。
   for each match in matches   ' 重复匹配集合
      RetStr=RetStr &"Match found at position "
      RetStr=RetStr&Match.FirstIndex&".Match Value is '"
      RetStr=RetStr&Match.Value&"'."&vbCRLF
   Next
   RegExpTest=RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 5

请参阅

Global 属性 | Pattern 属性

应用于：RegExp 对象


Length 属性

返回在字符串搜索中找到的匹配的长度。

object.Length

object 参数总是一个 Match 对象。

说明

下面的代码说明了 Length 属性的用法：

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立变量。
   Set regEx = New RegExp   ' 建立正则表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置是否区分大小写。
   regEx.Global = True   ' 设置全程可用性。
   Set Matches = regEx.Execute(strng)   ' 执行搜索。
   For Each Match in Matches      ' 遍历 Matches 集合。
      RetStr = RetStr & "匹配 " & I & " 位于 "
      RetStr = RetStr & Match.FirstIndex & "。匹配的长度为"
      RetStr = RetStr & Match.Length
      RetStr = RetStr & "个字符。" & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 5

请参阅

FirstIndex 属性 | Value 属性

应用于：Match 对象


Number 属性 (VBScript)

Visual Basic Scripting Edition

Number 属性

返回或设置数值指定错误。Number 是 Err 对象的默认属性。

object.Number [= errornumber]

参数

object
Err 对象。
errornumber
表示 VBScript 错误编号或 SCODE 错误值的整数。

说明

从 Automation 对象返回用户定义错误时，将选定数字作为错误代码添加到常数 vbObjectError 以设置 Err.Number。

下面代码举例说明如何使用 Number 属性

On Error Resume Next
Err.Raise vbObjectError + 1, "SomeObject"    ' 产生对象错误 #1.
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear   ' 清除错误。

要求

版本 1

请参阅

Description 属性 | HelpContext 属性 | HelpFile 属性 | Err 对象 | Source 属性

应用于：Err 对象


Pattern 属性

设置或返回被搜索的正则表达式模式。

object.Pattern [= "searchstring"]

参数

object
必选项。总是一个 RegExp 对象变量。
searchstring
可选项的。被搜索的正则字符串表达式。它可能包含设置部分表格中的各种正则表达式字符。

设置

在书写正则表达式的模式时使用了特殊的字符和序列。下表描述了可以使用的字符和序列，并给出了实例。

字符 | 描述
\ | 将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配。"\n"与换行符匹配。序列"\\"与"\"匹配，"\("与"("匹配。
^ | 匹配输入的开始位置。
$ | 匹配输入的结尾。
* | 匹配前一个字符零次或几次。例如，"zo*"可以匹配"z"、"zoo"。
+ | 匹配前一个字符一次或多次。例如，"zo+"可以匹配"zoo",但不匹配"z"。
? | 匹配前一个字符零次或一次。例如，"a?ve?"可以匹配"never"中的"ve"。
. | 匹配换行符以外的任何字符。
(pattern) | 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matches 集合中使用 Item [0]...[n]取得。如果要匹配括号字符(和 )，可使用"\(" 或 "\)"。
x|y | 匹配 x 或 y。例如 "z|wood" 可匹配 "z" 或 "wood"。"(z|w)oo" 匹配 "zoo" 或 "wood"。
{n} | n 为非负的整数。匹配恰好n次。例如，"o{2}" 不能与 "Bob 中的 "o" 匹配，但是可以与"foooood"中的前两个o匹配。
{n,} | n 为非负的整数。匹配至少n次。例如，"o{2,}"不匹配"Bob"中的"o"，但是匹配"foooood"中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。
{n,m} | m 和 n 为非负的整数。匹配至少 n 次，至多 m 次。例如，"o{1,3}" 匹配 "fooooood"中前三个o。"o{0,1}"等价于"o?"。
[xyz] | 一个字符集。与括号中字符的其中之一匹配。例如，"[abc]" 匹配"plain"中的"a"。
[^xyz] | 一个否定的字符集。匹配不在此括号中的任何字符。例如，"[^abc]" 可以匹配"plain"中的"p".
[a-z] | 表示某个范围内的字符。与指定区间内的任何字符匹配。例如，"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。
[^m-z] | 否定的字符区间。与不在指定区间内的字符匹配。例如，"[m-z]"与不在"m"到"z"之间的任何字符匹配。
\b | 与单词的边界匹配，即单词与空格之间的位置。例如，"er\b" 与"never"中的"er"匹配，但是不匹配"verb"中的"er"。
\B | 与非单词边界匹配。"ea*r\B"与"never early"中的"ear"匹配。
\d | 与一个数字字符匹配。等价于[0-9]。
\D | 与非数字的字符匹配。等价于[^0-9]。
\f | 与分页符匹配。
\n | 与换行符字符匹配。
\r | 与回车字符匹配。
\s | 与任何白字符匹配，包括空格、制表符、分页符等。等价于"[ \f\n\r\t\v]"。
\S | 与任何非空白的字符匹配。等价于"[^ \f\n\r\t\v]"。
\t | 与制表符匹配。
\v | 与垂直制表符匹配。
\w | 与任何单词字符匹配，包括下划线。等价于"[A-Za-z0-9_]"。
\W | 与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。
\num | 匹配 num个，其中 num 为一个正整数。引用回到记住的匹配。例如，"(.)\1"匹配两个连续的相同的字符。
\n | 匹配 n，其中n 是一个八进制换码值。八进制换码值必须是 1, 2 或 3 个数字长。例如，"\11" 和 "\011" 都与一个制表符匹配。"\0011"等价于"\001" 与 "1"。八进制换码值不得超过 256。否则，只有前两个字符被视为表达式的一部分。允许在正则表达式中使用ASCII码。
\xn | 匹配n，其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。例如，"\x41"匹配"A"。"\x041"等价于"\x04" 和 "1"。允许在正则表达式中使用 ASCII 码。

说明

下面的代码说明了 Pattern 属性的用法：

Function RegExpTest(patrn, strng)
   Dim regEx,Match,Matches   '建立变量。
   Set regEx = New RegExp   '建立一般表达式。
   regEx.Pattern= patrn   '设置模式。
   regEx.IgnoreCase = True   '设置是否区分大小写。
   regEx.Global = True   '设置全局可用性。
   Set Matches=regEx.Execute(string)   '执行搜索。
   For each match in matches   '重复匹配集合
      RetStr=RetStr &"Match found at position "
      RetStr=RetStr&Match.FirstIndex&".Match Value is '"
      RetStr=RetStr&Match.Value&"'."&vbCRLF
   Next
   RegExpTest=RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 2

请参阅

Global 属性 | IgnoreCase 属性

应用于：RegExp 对象


Source 属性 (VBScript)

Visual Basic Scripting Edition

Source 属性

返回或设置最初生成错误的对象或应用程序的名称。

object.Source [= stringexpression]

参数

object
Err 对象。
stringexpression
字符串表达式，表示生成错误的应用程序。

说明

Source 属性指定一个字符串表达式，此表达式通常是导致错误的对象的类名称或程序设计的 ID。当代码无法处理可访问对象产生的错误时，请使用 Source 为用户提供信息。例如，如果访问 Microsoft Excel 并且产生一个被零除的错误，Microsoft Excel 将 Err.Number 设置为此错误的错误代码并将 Source 设置为 Excel.Application。注意，如果错误产生于另一个由 Microsoft Excel 调用的对象中，则 Excel 截获此错误并且将 Err.Number 设置为它自己的被零除的代码。但是，它保留其他 Err 对象（包括 Source），就象由产生错误的对象设置一样。

Source 总是含有最初产生错误的对象名称，您可根据所访问对象的错误信息文档，编写处理错误的代码。若错误处理程序失败，则可使用 Err 对象信息为用户描述错误，使用 Source 和其他 Err 通知用户最初导致错误的对象、错误描述等等。

在代码中产生错误时，Source 是应用程序的程序设计 ID 。

下面代码举例说明如何使用 Source 属性:

On Error Resume Next
Err.Raise 6   ' 引发溢出错误。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description & Err.Source)
Err.Clear   ' 清除该错误。

要求

版本 1

请参阅

Description 属性 | Err 对象 | HelpContext 属性 | HelpFile 属性 | Number 属性 | On Error 语句

应用于：Err 对象


Value 属性

返回在一个搜索字符串中找到的匹配的值或文本。

object.Value

object 参数总是一个 Match 对象。

说明

下列代码说明了 Value 属性的用法：

Function RegExpTest(patrn, strng)
   Dim regEx, Match, Matches   ' 建立变量。
   Set regEx = New RegExp   ' 建立正则表达式。
   regEx.Pattern = patrn   ' 设置模式。
   regEx.IgnoreCase = True   ' 设置是否区分字母的大小写。
   regEx.Global = True   ' 设置全程可用性。
   Set Matches = regEx.Execute(strng)   ' 执行搜索。
   For Each Match in Matches   ' 遍历Matches集合。
      RetStr = RetStr & "Match " & I & " found at position "
      RetStr = RetStr & Match.FirstIndex & ". Match Value is "'
      RetStr = RetStr & Match.Value & "'." & vbCRLF
   Next
   RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))

要求

版本 1

请参阅

FirstIndex 属性 | Length 属性

应用于：Match 对象


语句

本节内容

Call 语句

Class 语句

Const 语句

Dim 语句

Do...Loop 语句

Erase 语句

Execute 语句

ExecuteGlobal 语句

Exit 语句

For Each...Next 语句

For...Next 语句

Function 语句

If...Then...Else 语句

On Error 语句

Option Explicit 语句

Private 语句

Property Get 语句

Property Let 语句

Property Set 语句

Public 语句

Randomize 语句

ReDim 语句

Rem 语句

Select Case 语句

Set 语句

Sub 语句

While...Wend 语句

With 语句

相关章节

VBScript 语言参考


Call 语句

将控制权传递给 Sub 或 Function 过程。

 [Call] name [argumentlist]

参数

Call
可选项关键字。如果指定此关键字，则必须用括号把 argumentlist 括起来。例如：

Call MyProc(0)

name
必选项。要调用的过程名。
argumentlist
可选项。传递给过程的变量、数组或表达式列表，用逗号分隔每一项。

说明

在调用过程时，不必使用 Call 关键字。然而，如果使用 Call 关键字调用要求参数的过程，则必须用括号将 argumentlist 括起来。如果省略 Call 关键字，那么必须也同时省略 argumentlist 参数两边的括号。使用 Call 语法调用内部函数或使用用户自定义函数，函数返回值都会被放弃。

Call MyFunction("Hello World")
Function MyFunction(text)
   MsgBox text
End Function

要求

版本 1


Class 语句

声明一个类的名称，以及组成该类的变量、属性和方法的定义。

Class name
    statements
End Class

参数

name
必选项。Class 的名称；遵照标准的变量命名规则。
statements
必选项。一个或多个语句，定义了 Class 的变量、属性和方法。

说明

在 Class 块中，成员通过相应的声明语句被声明为 Private 或 Public。被声明为 Private 的将只在 Class 块内是可见的。被声明为 Public 不仅在 Class 块的内部是可见的，对 Class 块之外的代码也是可见的。没有使用 Private 或 Public 明确声明的被默认为 Public。在类的块内部被声明为 Public 的过程（Sub 或 Function）将成为类的方法。Public 变量将成为类的属性，同使用 Property Get、Property Let 和 Property Set 显式声明的属性一样。类的缺省属性和方法是在它们的声明部分用 Default 关键字指定的。关于如何使用该关键字，请参考单独的声明语句主题。

要求

版本 5

请参阅

Dim 语句 | Function 语句 | Private 语句 | Property Get 语句 | Property Let 语句 | Property Set 语句 | Public 语句 | Set 语句 | Sub 语句


Const 语句

声明用于代替文字值的常数。

 [Public | Private] Const constname = expression

参数

Public
可选项。该关键字用于在 Script 级中声明可用于所有脚本中所有过程的常数。不允许在过程中使用。
Private
可选项。该关键字用于在脚本级中声明只可用在声明所在的脚本中的常数。不允许在过程中使用。
constname
必选项。常数的名称，根据标准的变量命名规则。
expression
必选项。文字或其他常数，或包括除 Is 外的所有算术运算符和逻辑运算符的任意组合。

说明

在默认情况下常数是公用的。过程中的常数总是专有的，其可见性无法改变。Script 中，可用 Private 关键字来改变脚本级常数可见性的默认值。

要在同一行中声明若干个常数，可用逗号将每个常数赋值分开。用这种方法声明常数时，如果使用了 Public 或 Private 关键字，则该关键字对该行中所有常数都有效。

常数声明中不能使用变量、用户自定义的函数或 VBScript 内部函数（如 Chr)。按定义，它们不能是常数。另外也不能从含有运算符的表达式中创建常数，即只允许使用简单常数。在 Sub 或 Function 过程中声明的常数是该过程的局部常数。在过程外声明的常数是声明所在的脚本中的全局常数。可以在任何使用表达式的地方使用常数。下面代码举例说明如何使用 Const 语句:

Const MyVar = 459   ' 常数默认为公有。
Private Const MyString = "HELP"   ' 定义私有常数。
Const MyStr = "Hello", MyNumber  = 3.4567   '在一行上定义多个常数。
注意 常数能使脚本自己支持并且容易修改。不像变量，脚本在运行时，常数不能被无意中修改。

要求

版本 5

请参阅

Dim 语句 | Function 语句 | Private 语句 | Public 语句 | Sub 语句


Dim 语句

声明变量并分配存储空间。

Dim varname[([subscripts])][, varname[([subscripts])]] . . .

参数

varname
变量的名称，符合标准变量命名规则。
subscripts
数组变量的维数，最多可以声明 60 维的数组。subscripts 参数使用以下语法：

upperbound [,upperbound] . . .

数组下界总是 0。

说明

用 Dim 声明的 Script 级变量可用于脚本中的所有过程，过程级变量只能用于过程中。

也可用带空圆括号的 Dim 语句来声明动态数组。声明动态数组后，可在过程内使用 ReDim 语句来定义该数组的维数和元素。如果试图重新定义在 Dim 语句中已经显式指定维数的数组，则会发生错误。

注意 在过程中使用 Dim 语句时，通常将 Dim 语句放在过程的开始处。

下面例子举例说明如何使用 Dim 语句:

Dim Names(9)     ' 声明一个具有 10 个元素的数组。
Dim Names()      ' 声明动态数组。
Dim MyVar, MyNum   ' 声明两个变量。

要求

版本 1

请参阅

Private 语句 | Public 语句 | ReDim 语句 | Set 语句


Do...Loop 语句

当条件为 True 时或条件变为 True 之前重复执行某语句块。

Do [{While | Until} condition]
[statements]
[Exit Do]
[statements]
Loop

也可以使用下面的语法：

Do
[statements]
[Exit Do]
[statements]
Loop [{While | Until} condition]

参数

condition
数值或字符串表达式，其值为 True 或 False。如果 condition 为 Null，则 condition 被当作 False。
statements
当 condition 为 True 时被重复执行的一条或多条命令。

说明

Exit Do 仅可以用在 Do...Loop 控制语句中，提供另一种退出 Do...Loop 的方法。可以在 Do...Loop 语句中的任何位置放置任意个 Exit Do。Exit Do 通常与条件判断语句（如 If...Then ）一起使用，将控制传递给紧随在 Loop 语句后面的语句。

当用于嵌套 Do...Loop 中的时候，Exit Do 将控制传递给其所在循环的上一层嵌套循环。

下面例子举例说明如何使用 Do...Loop 语句:

Do Until DefResp = vbNo
   MyNum = Int (6 * Rnd + 1)   ' 产生 1 到 6 之间的随机数。
   DefResp = MsgBox (MyNum & " 想要另一个数吗？", vbYesNo)
Loop

Dim Check, Counter
Check = True: Counter = 0   ' 初始化变量。
Do          ' 外层循环。
  Do While Counter < 20     ' 内层循环。
    Counter = Counter + 1   ' 增加计数器。
    If Counter = 10 Then   ' 如果条件为 True...
      Check = False         ' 将标志值设置为 False。
      Exit Do         ' 终止内层循环。
    End If
  Loop
Loop Until Check = False        ' 立即终止外层循环。

要求

版本 1

请参阅

Exit 语句 | For...Next 语句 | While...Wend 语句


Erase 语句

重新初始化固定大小数组的元素，并释放动态数组的存储空间。

Erase array

array 参数是要清除的数组变量的名称。

说明

判断数组是固定长度数组（常规）还是动态数组是很重要的，这是因为 Erase 要根据数组的类型进行不同的操作。Erase 无需为固定大小的数组还原内存。Erase 按照下表设置固定数组的元素：

数组的类型 | Erase 对固定数组元素的影响
固定数值数组 | 将每个元素设置为 0。
固定字符串数组 | 将每个元素设置为零长度字符串 ("")。
对象数组 | 将每个元素设置为特殊值 Nothing。

Erase 释放动态数组所使用的内存。在程序再次引用该动态数组之前，必须使用 ReDim 语句来重新定义该数组变量的维数。

下面例子举例说明如何使用 Erase 语句。

Dim NumArray(9)
Dim DynamicArray()
ReDim DynamicArray(9)   ' 分配存储空间。
Erase NumArray   ' 每一元素都被重新初始化。
Erase DynamicArray   ' 释放数组占用的内存。

要求

版本 1

请参阅

Dim 语句 | Nothing | ReDim 语句


Execute 语句

执行一个或多个指定的语句。

Execute statements

所需要的 statements 参数是一个字符串表达式，其中包含一个或多个要执行的语句。如果要在 statements 参数中包含多条语句，应使用分号或嵌入的分行将其分隔开。

说明

在 VBScript 中，x = y 可以有两种解释。首先是作为赋值语句，将 y 的值赋予 x。其次是作为表达式，测试x 和 y 的值是否相等。如果相等，结果为 True；否则，结果为 False。Execute 语句总是使用第一种解释，而 Eval 方法总是使用第二种。

注意 在 Microsoft® JScript™ 中并不存在赋值与比较之间的混淆，因为赋值运算符(=)与比较运算符(==)是不同的。

调用 Execute 语句的上下文确定了要运行的代码可以使用的对象和变量。作用域内的对象和变量是 Execute 语句中运行的代码可以使用的。不过，必须明白的一点是，如果被执行的代码创建了过程，那么该过程将不会继承它所在的过程的作用域。

与其他过程类似，新的过程的作用域是全局的，它继承了全局作用域的全部东西。与其他过程不同的是，它的上下文不是全局作用域，因此它只能在发生 Execute 语句的过程内的上下文中执行。不过，如果相同的 Execute 语句是在过程之外(例如在全局作用域)的作用域中被调用，那么它将不仅继承全局作用域中的所有东西，而且它还可以在任何地方被调用，因为它的上下文是全局的。下面的例子说明了这种特点：

Dim X   ' 在全局作用域中声明 X。
X = "Global"   ' 将全局的 X 赋值。
Sub Proc1   ' 声明过程。
   Dim X   ' 在局部作用域中声明 X。
   X = "Local"   ' 对局部的 X 赋值。
            ' 此处的 Execute 语句建立了一个过程，
            ' 在调用该过程时它将打印 X。
            ' 它打印的将是全局 X，因为 Proc2
            ' 继承了全局作用域中的一切。
   Execute "Sub Proc2: Print X: End Sub"
   Print Eval("X")   ' 打印本地 X。
   Proc2   ' 在 Proc1 的作用域中调用 Proc2。
End Sub
Proc2   ' 本行将导致一个错误，因为
        ' Proc2 在 Proc1 之外是不可使用的。
Proc1   ' 调用 Proc1。
   Execute "Sub Proc2: Print X: End Sub"
Proc2   ' 这句话可以成功，因为 Proc2
        ' 现在是全局可用的。

下面的例子显示了如何将 Execute 语句改写，免于将整个过程包含在引号内：

S = "Sub Proc2" & vbCrLf
S = S & "   Print X" & vbCrLf
S = S & "End Sub"
Execute S

要求

版本 1

请参阅

Eval 函数 | ExecuteGlobal 语句


ExecuteGlobal 语句

执行一个功多个在脚本全局名字空间中指定的语句。

ExecuteGlobal statement

statement 参数是一个包含一个或多个可执行语句的字符串表达式。在statement 参数中可以包含多条语句, 使用冒号将其分开。

说明

在 VBScript 中, x = y 有两种解释方法。第一种方法是作为一条赋值语句, 将 y 的值赋给 x。第二种方法是作为一个表达式，用于测试 x 和 y 是否具有相同的值。如果它们相等,则结果为 True; 如果他们不相等,其结果为 False.ExecuteGlobal 语句总是使用第一种方法,而 Eval 方法总是使用第二种方法。

注意 在 Microsoft® JScript™ 中, 赋值与比较之间不存在混消，因为赋值运算符(=) 不同于比较运算符。

在脚本的全局名字空间中，ExecuteGlobal 中的所有语句都有是可执行的。因此，允许您将代码添加到程序中，以便于任何过程能够对其进行访问。例如,一个 VBScript Class 语句在运行时可以执行。随之函数创造此类的一个新实例。

在运行时添加过程和类是非常有用的,但是也可能导致在运行时覆盖已有的全局变量和函数。因为这可能导致非常严重的程序问题,因此，当使用 ExecuteGlobal 语句时一定得非常谨慎。如果您无需访问过程之外的变量或函数,最好使用Execute 语句，因为它只影响主调函数的名字空间。

下面的例子解释了 ExecuteGlobal 语句的用法。

Dim X         ' 声明 X 为全局变量。
X = "Global"      ' 给全局变量 X 赋值。
Sub Proc1   ' 声明过程。
  Dim X      ' 在局部变量中声明 X。
  X = "Local"   ' 给局部变量 X 赋值。
         ' 此处的可执行语句
         ' 创建一个过程, 当被调用时, 打印 X。
         ' 此处将打印全局变量 X 的值，因为 Proc2
         ' 继承了全局变量中的一切。
  ExecuteGlobal "Sub Proc2: 打印 X: End Sub"
  Print Eval("X")   ' 打印局部 X。
  Proc2      ' 在全局作用区域中调用 Proc2
             ' 将打印 "Global" 。
End Sub
Proc2        ' 此行将导致错误
             ' 因为 Proc2 在 Proc1 之外是不可用的。
Proc1         ' 调用 Proc1。
  Execute "Sub Proc2: 打印 X: End Sub"
Proc2         ' 此行调用成功，因为 Proc2
         ' 在全局作用区域中是可用的。

下面的例子演示了 ExecuteGlobal 语句可以被重写，因此您无需将下面的整个过程都包括在引用标记之内。

S = "Sub Proc2" & vbCrLf
S = S & "  Print X" & vbCrLf
S = S & "End Sub"
ExecuteGlobal S

要求

版本 1


Exit 语句

退出 Do...Loop、For...Next、Function 或 Sub 代码块。

Exit Do
Exit For
Exit Function
Exit Property
Exit Sub

Exit 语句的语法有以下几种形式：

语句 | 描述
Exit Do | 提供一种退出 Do...Loop 语句的方法。只能在 Do...Loop 语句中使用。Exit Do 将控制权转移到 Loop 语句之后的语句。在嵌套的 Do...Loop 语句中使用时，Exit Do 将控制权转移到循环所在位置的上一层嵌套循环。
Exit For | 提供一种退出 For 循环的方法。只能在 For...Next 或 For Each...Next 循环中使用。Exit For 将控制权转移到 Next 之后的语句。在嵌套的 For 循环中使用时，Exit For 将控制权转移到循环所在位置的上一层嵌套循环。
Exit Function | 立即从出现的位置退出 Function 过程。继续执行调用 Function 的语句后面的语句。
Exit Property | 立即从所在的 Property 过程中退出。继续执行下面调用 Property 过程的语句。
Exit Sub | 立即从出现的位置退出 Sub 过程，继续执行调用 Sub 的语句后面的语句。

下面例子举例说明如何使用 Exit 语句:

Sub RandomLoop
   Dim I, MyNum
   Do                           ' 设置死循环。
      For I = 1 To 1000          ' 循环 1000 次。
         MyNum = Int(Rnd * 100)   '产生随机数。
         Select Case MyNum        '求随机数的值。
            Case 17: MsgBox "Case 17"
              Exit For             ' 如果是 17，退出 For...Next。
            Case 29: MsgBox "Case 29"
              Exit Do              ' 如果是 29，退出 Do...Loop。
            Case 54: MsgBox "Case 54"
              Exit Sub             ' 如果是 54，退出 Sub 过程。
         End Select
      Next
   Loop
End Sub

要求

版本 1

请参阅

Do...Loop 语句 | For Each...Next 语句 | For...Next 语句 | Function 语句 | Sub 语句


For Each...Next 语句

对数组或集合中的每个元素重复执行一组语句。

For Each element In group
[statements]
[Exit For]
[statements]
Next [element]

参数

element
用来枚举集合或数组中所有元素的变量。对于集合，element 可能是 Variant 变量、通用 Object 变量或任意指定的 Automation 对象变量。对于数组，element 只能是 Variant 变量。
group
对象集合或数组的名称。
statements
对于 group 中的每一项执行的一条或多条语句。

说明

如果 group 中有至少一个元素，就会进入 For Each 块执行。一旦进入循环，便首先对 group 中第一个元素执行循环中的所有语句。只要 group 中还有其他的元素，就会对每个元素执行循环中的语句。当 group 中的没有其他元素时退出循环，然后从 Next 语句之后的语句继续执行。

Exit For 只能用于 For Each...Next 或 For...Next 控制结构中，提供另一种退出循环的方法。可在循环的任意位置放置任意个 Exit For 语句。Exit For 经常和条件判断语句一起使用（例如 If...Then），并立即将控制权转移到 Next 之后的语句。

可以将一个 For Each...Next 循环放置在另一个之中，组成嵌套式 For Each...Next 循环。但是每个循环的 element 必须是唯一的。

注意 如果省略 Next 语句中的 element，则程序仍会象已包含它一样继续执行。如果 Next 语句在其相应的 For 语句之前出现，则会产生错误。

下面例子举例说明如何使用 For Each...Next 语句:

Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name
      s = s & "<BR>"
   Next
  ShowFolderList = s
End Function

要求

版本 2

请参阅

Do...Loop 语句 | Exit 语句 | For...Next 语句 | While...Wend 语句


For...Next 语句

以指定次数重复执行一组语句。

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next

参数

counter
用做循环计数器的数值变量。这个变量不能是数组元素或用户自定义类型的元素。
start
counter 的初值。
end
counter 的终值。
step
counter 的步长。如果没有指定，则 step 的默认值为 1。
statements
For 和 Next 之间的一条或多条语句，将被执行指定次数。

说明

step 参数可以是正数或负数。step 参数值决定循环的执行情况，如下所示：

值 | 如果 ... 则循环执行
正数或 0 | counter <= end
负数 | counter >= end

当循环启动并且所有循环中的语句都执行后，step 值被加到 counter 中。这时，或者循环中的语句再次执行（基于循环开始执行时同样的测试），或者退出循环并从 Next 语句之后的语句继续执行。

注意 在循环体内改变 counter 的值，将会使程序代码的阅读和调试变得更加困难。

Exit For 只能用于 For Each...Next 或 For...Next 结构中，提供另一种退出循环的方法。可在语句中的任意位置放置任意个 Exit For 语句。Exit For 经常和条件判断语句一起使用（例如 If...Then），并立即将控制权转移到 Next 之后的语句。

可以将一个 For...Next 循环放置在另一个 For...Next 循环中，组成嵌套循环。每个循环中的 counter 要使用不同的变量名。下面的结构是正确的：

For I = 1 To 10
      For J = 1 To 10
            For K = 1 To 10
            . . .
            Next
      Next
Next

要求

版本 1

请参阅

Do...Loop 语句 | Exit 语句 | For Each...Next 语句 | While...Wend 语句


Function 语句

声明 Function 过程的名称、参数以及构成其主体的代码。

 [Public [Default]| Private] Function name [(
   arglist
)]
[statements]
[name = expression]
[Exit Function]
[statements]
[name = expression]
End Function

参数

Public
表示 Function 过程可被所有脚本中的所有其他过程访问。
Default
只与 Class 块中的 Public 关键字一起使用来表示 Function 过程是类的默认方法。如果在一个类中指定了不止一个 Default 过程，就有错误发生。
Private
表示 Function 过程只可被声明它的脚本中的其他过程访问或者如果函数是一个数据类，那么 Function 过程只能被该类中的其他过程访问。
name
Function 的名称，遵循标准的变量命名规则。
arglist
代表调用时要传递给 Function 过程的参数的变量列表。用逗号隔开多个变量。
statements
在 Function 过程的主体中执行的任意语句组。
expression
Function 的返回值。

arglist 参数包含下列语法和部分：

[ByVal | ByRef] varname[( )]

参数

ByVal
表示该参数是按值方式传递的。
ByRef
表示该参数按引用方式传递。
varname
代表参数变量的名称；遵循标准的变量命名规则。

说明

如没有显式指定使用 Public 或 Private，则 Function 过程默认为公用，即它们对于脚本中的所有其他过程是可见的。Function 中局部变量的值在对过程的调用中不被保留。

不能在任何其他过程（例如，Sub 或 Property Get）中定义 Function 过程。

使用 Exit Function 语句可以从 Function 过程中立即退出。程序继续执行调用 Function 过程的语句之后的语句。可在 Function 过程的任何位置出现任意个 Exit Function 语句。

与 Sub 过程类似，Function 过程是可以获取参数、执行一系列语句并改变其参数值的独立过程。与 Sub 过程的不同之处是：当要使用由函数返回的值时，可以在表达式的右边使用 Function 过程，这与内部函数的使用方式一样，例如 Sqr、Cos 或 Chr。

在表达式中，可以通过使用函数名，并在其后用圆括号给出相应的参数列表来调用 Function 过程。有关调用 Function 过程的详细信息，请参阅 Call 语句。

警告 Function 过程可以是递归的，即该过程可以调用自身以完成某个给定的任务。但是，递归可能会导致堆栈溢出。

要从函数返回一个值，只需将值赋给函数名。在过程的任意位置都可以出现任意个这样的赋值。如果没有给 name 赋值, 则过程将返回一个默认值：数值函数返回 0，字符串函数返回零长度字符串 ("")。如果在 Function 中没有对象引用被指定给 name（使用 Set），则返回对象引用的函数将返回 Nothing。

下面的样例说明如何给一个名为 BinarySearch 的函数赋返回值。在此样例中，将 False 赋给了该函数名，表示没有找到某个值。

Function BinarySearch(. . .)
      . . .
      ' 未找到该值。返回 False 值。
      If lower > upper Then
          BinarySearch = False
          Exit Function
      End If
      . . .
End Function

在 Function 过程中使用的变量分为两类：一类是在过程内显式声明的，另一类则不是。在过程内显式声明的变量（使用 Dim 或等效方法）总是过程的局部变量。被使用但没有在过程中显式声明的变量也是局部变量，除非在该过程外更高级别的位置显式声明它们。

警告 过程可以使用没有在过程内显式声明的变量，但只要有任何 script 级定义的名称与之同名，就会产生名称冲突。如果过程中引用的未声明的变量与其他的过程、常数或变量的名称相同，则会认为过程引用的是脚本级的名称。要避免这类冲突，请使用 Option Explicit 语句可强制显式声明变量。
警告 VBScript 可能会重新排列数学表达式以提高内部效率。当 Function 过程修改数学表达式中变量的值时，应避免在同一表达式中使用该函数。

要求

版本 1

请参阅

Call 语句 | Dim 语句 | Exit 语句 | Nothing | Set 语句 | Sub 语句


If...Then...Else 语句

根据表达式的值有条件地执行一组语句。

If condition Then statements [Else elsestatements ]

或者，使用块形式的语法：

If condition Then
[statements]
[ElseIf condition-n Then
[elseifstatements]] . . .
[Else
[elsestatements]]
End If

参数

condition
一个或多个下面两种类型的表达式：

数值或字符串表达式，其运算结果是 True 或 False。如果 condition 是 Null，则 condition 被视为 False。

形如 TypeOf objectname Is objecttype 的表达式。objectname 是任何对象的引用，而 objecttype 则是任何有效的对象类型。如果 objectname 是 objecttype 所指定的一种对象类型，则表达式为 True；否则为 False。

Statements
如果 condition 为 True 时，执行的一条或多条（以冒号分开）语句。
condition-n
同 condition。
elseifstatements
如果相关的 condition-n 为 True时，执行的一条或多条语句。
elsestatements
如果前面没有 condition 或 condition-n 表达式为 True 时，执行的一条或多条语句。

说明

对于短小简单的测试，可以使用单行形式（第一种语法）。但块形式（第二种语法）提供了比单行形式更强的结构化与适应性，比较容易阅读、维护及调试。

注意 在单行语法中，可以执行多条语句作为 If...Then 判断的结果，但所有语句必须在同一行上并且以冒号分开，如下列语句所示：
If A > 10 Then A = A + 1 : B = B + A : C = C + B

当程序运行到 If 块（第二种语法）时，将测试 condition。如果 condition 是 True，则执行 Then 之后的语句。如 condition 是 False，则每个 ElseIf 部分的条件式（如果有的话）会依次计算并加以测试。当找到某个为 True 的条件时，则其相关的 Then 之后的语句会被执行。如没有一个 ElseIf 语句是 True（或没有 ElseIf 子句），则将执行 Else 之后的语句。执行 Then 或 Else 之后的语句以后，将继续执行 End If 之后的语句。

Else 和 ElseIf 子句都是可选项的。在 If 块中可以放置任意多个 ElseIf 子句，但是都必须在 Else 子句之前。If 块语句可以被嵌套，即被包含在另一个 If 块语句之中。

要判断某个语句是否是一个 If 块，可检查 Then 关键字之后是什么。如果在 Then 的同一行之后还有其他非注释的内容，则此语句就是单行形式的 If 语句。

If 块语句必须是某一行的第一条语句，并且必须以 End If 语句结束。

要求

版本 1


On Error 语句

启用或禁用错误处理程序。

On Error Resume Next
On Error GoTo 0

说明

如果在您的代码中未使用 On Error Resume Next 语句, 所发生的运行时错误将显示错误信息，同时，代码的执行也随之终止。但是运行代码的主机决定了具体操作。主机有时可有选择地处理各类错误。在有些情况下，它可以在出错的地方激活脚本调试器。而在另一些情况下，由于主机无法通知用户，因此对所发生的错误没有明确说明。至于如何处理错误则完全取决于主机的功能。

在任意一个特殊过程中，只要在调用堆栈的地方启用错误处理程序，所发生的错误一般不会是致命性的。如果在一个过程中没有启用局部错误处理程序，当发生错误时，控制可通过堆栈调用转移，直到找到一个具有错误处理程序的过程，并在出错的地方处理错误。如果在调用堆栈的过程中没有找到错误处理程序，则在出错的地方显示错误信息，同时终止代码执行，或者通过主机来正确处理错误。

On Error Resume Next 会使程序按照产生错误的语句之后的语句继续执行，或是按照最近一次所调用的过程（该过程含有 On Error Resume Next 语句）中的语句继续运行。这个语句可以不顾运行时错误，继续执行程序，之后您可以在过程内部建立错误处理例程。在调用另一个过程时，On Error Resume Next 语句变为非活动的。所以，如果希望在例程中进行内部错误处理，则应在每一个调用的例程中执行 On Error Resume Next 语句。

当调用另一过程时，禁止使用On Error Resume Next 语句，因此如果您想在例程中嵌入错误处理程序，则需要在每次调用例程时都应执行 On Error Resume Next 语句。当退出一个过程时，错误处理程序可恢复到它在进入所退出过程之前的状态。

如果您已启用 On Error Resume Next 错误处理程序，则可使用 On Error GoTo 0禁用错误处理程序。

下面例子举例说明如何使用 On Error Resume Next 语句:

On Error Resume Next
Err.Raise 6   ' 引发溢出错误。
MsgBox ("Error # " & CStr(Err.Number) & " " & Err.Description)
Err.Clear   '清除该错误。

要求

版本 1

请参阅

Err 对象 | Exit 语句


Option Explicit 语句

强制要求显式声明脚本中的所有变量。

Option Explicit

说明

如果使用 Option Explicit，该语句必须出现在脚本的任何其他语句之前。

使用 Option Explicit 语句时，必须使用 Dim、Private、Public 或 ReDim 语句显式声明所有变量。如果试图使用未经声明的变量名，则会出现错误。

提示 可用 Option Explicit 避免拼错已存在的变量名称。对于作用范围不清楚的变量，使用此语句可避免发生混淆。

下面例子举例说明如何使用 Option Explicit 语句:

Option Explicit   ' 强制显示声明变量。
Dim MyVar   ' 声明变量。
MyInt = 10   ' 未声明变量产生错误。
MyVar = 10   ' 声明变量不产生错误。

要求

版本 1


Private 语句

定义私有变量并分配存储空间。在 Class块中定义私有变量。

Private varname[([subscripts])][， varname[([subscripts])]] . . .

参数

varname
变量的名称；遵循标准变量命名规则。
subscripts
数组变量的维数，最多可以声明 60 维的数组。subscripts 参数使用下列语法：

upper [, upper] . . .

数组的下界总是 0。

说明

Private 语句变量只能在声明该变量的脚本中使用。

在使用引用对象的变量之前，必须用 Set 语句将某个现有对象赋予此变量。在赋值之前，所声明的对象变量被初始化Empty。

也可用带空圆括号的 Private 语句声明动态数组。声明动态数组后，可在过程内使用 ReDim 语句定义该数组的维数和元素。如果在 Private、Public 或 Dim 语句中已显式指定数组大小，却试图重新声明数组维数，就会发生错误。

注意 在过程中使用 Private 语句时，通常将 Private 语句放在过程的开始处。

下面例子举例说明如何使用 Private 语句:

Private MyNumber   ' 私有 Variant 变量。
Private MyArray(9)   ' 私有数组变量。
   ' Variant 变量的多个私有声明。
Private MyNumber, MyVar, YourNumber

要求

版本 1

请参阅

Dim 语句 | Public 语句 | ReDim 语句 | Set 语句


Property Get 语句

在 Class 块中，声明构成用来取得（返回）属性值的 Property 过程的主体的名称、参数和代码。

 [Public [Default]| Private] Property Get name [(arglist)]
    [statements]
    [[Set] name = expression]
    [Exit Property]
    [statements]
    [[Set] name = expression]
End Property

参数

Public
表明Property Get 过程可以被所有脚本中的其他过程访问。
Default
只与 Public 关键字一起使用，表明 Property Get 过程中定义的属性为类的缺省属性。
Private
表明 Property Get 过程只对定义它的 Class 块中的其他过程是可以访问的。
name
Property Get 过程的名称；遵守标准的变量命名规则，区别仅仅在于它可以与同一Class块中的Property Let 或 Property Set过程。
arglist
该变量列表代表了 Property Get 过程被调用时传递给它的参数。多个参数之间用逗号分隔开。Property Get 过程中的每个参数的名称必须与 Property Let 过程中的相应参数相同(如果有的话)。
statements
任意的一组语句，将在 Property Get 过程的主体中执行。
Set
在将对象作为 Property Get 过程的返回值时使用的关键字。
expression
Property Get 过程的返回值。

说明

如果未使用 Public 或 Private 明确声明，则 Property Get 过程被缺省为公有的，即它们对于脚本中的其他所有过程都是可见的。Property Get过程中的局部变量的值在不同的过程调用之间是不保存的。

在其他任何过程(例如 Function 或 Property Let) 内部都不能定义 Property Get 过程。

Exit Property 语句将导致立即从 Property Get 过程中退出。程序将继续执行调用 Property Get 过程的语句之后的程序。Exit Property 语句可以出现在 Property Get 过程中的任何位置，次数不限。

与Sub 和 Property Let 过程类似，Property Get 过程是能够接受参数的过程，可以执行一系列的语句，以及改变参数的值。然而，与Sub 和 Property Let 不同的是，Property Get 过程可以被用于表达式的右侧，用与使用Function 或属性名称相同的方式来返回属性的值。

要求

版本 5

请参阅

Class 语句 | Dim 语句 | Exit 语句 | Function 语句 | Private 语句 | Property Let 语句 | Property Set 语句 | Public 语句 | Set 语句 | Sub 语句


Property Let 语句

在 Class 块中，声明名称、参数和代码等，它们构成了设置属性值的 Property 过程的主体。

 [Public | Private] Property Let name (
   [arglist,] value
)
    [statement]
    [Exit Property]
    [statement]
End Property

参数

Public
表明 Property Let 过程可以被所有脚本中的其他所有过程访问。
Private
表明 Property Let 过程只能被定义之的 Class 块内的其他过程访问。
name
Property Let 过程的名称；遵守标准的变量命名规则，区别仅仅在于其名称可以与相同 Class 块中的 Property Get 或 Property Set 过程相同。
arglist
该变量列表代表了在调用时被传递到 Property Let 过程的参数。多个参数之间用逗号隔开。Property Let 过程的每个参数的名字必须与 Property Get 过程中的相应参数相同。此外， Property Let 过程的参数比相应的 Property Get 过程总要多一个。该参数为被赋予属性的值。
value
该变量中包含要赋予属性的值。当过程被调用时，该参数将出现在调用表达式的右侧。
statement
任意的一组语句，将在 Property Let 过程的主体内执行。

说明

如果未明确地使用 Public 或 Private 进行指定，Property Let 过程被缺省设置为公有的，即它们对于脚本内的其他所有过程都是可见的。Property Let过程中的局部变量的值在不同的过程调用之间是不被保存的。

在其他任何过程（例如 Function 或 Property Get）的内部不能够定义 Property Let 过程。

Exit Property 语句将导致立即从 Property Let 过程中退出。程序将从调用 Property Let 过程的语句之后的点继续执行。Exit Property 语句可以出现在 Property Let 过程中的任何位置，次数不限。

注意 每个 Property Let 语句必须为所定义的过程至少定义一个参数。该参数（在存在多个参数时的最后一个参数）包含了当 Property Let 语句被调用时要赋予属性的值。该参数在前面的语法中称为value。

与 Function 和 Property Get 过程类似，Property Let 过程是一个单独的过程，它可以接受参数，执行一系列的语句，还可以改变参数的值。不过，与Function 和 Property Get 过程不同的是，它们两者都返回一个值，而Property Let过程只能用于属性赋值表达式的左侧。

要求

版本 5

请参阅

Class 语句 | Dim 语句 | Exit 语句 | Function 语句 | Private 语句 | Property Get 语句 | Property Set 语句 | Public 语句 | Set 语句 | Sub 语句


Property Set 语句

在 Class 块中，声明名称、参数和代码，这些构成了将引用设置到对象的 Property 过程的主体。

 [Public | Private] Property Set name(
   [arglist,] reference
)
    [statement]
    [Exit Property]
    [statement]
End Property

参数

Public
表明 Property Set 过程可以被所有脚本中的其他所有过程访问。
Private
表明 Property Set 过程只能被声明之的同一 Class 块中的其他过程访问。
name
Property Set 过程的名称；遵守标准的变量命名规则，不过该名称可以与同一个 Class 块中的 Property Get 或 Property Let 过程相同。
arglist
变量列表，代表在 Property Set 过程被调用时传递给它的参数。多个参数之间用逗号分隔开。此外，Property Set 过程将总是比它相应的 Property Get 过程多一个参数。这个多出来的参数是被赋予属性的对象。
reference
变量，其中包含被用于对象引用赋值的右侧的对象引用。
statement
将要在 Property Set 过程主体中执行的任何一组语句。

说明

除非使用 Public 或 Private 明确地进行指定，否则 Property Set 过程被设置为缺省的公有模式，即脚本中的其他所有过程都是可见的。在不同的过程调用时，Property Set 过程中的局部变量是不保存的。

在其他任何过程（例如Function或Property Let）中都不能够定义Property Set过程。

Exit Property 语句将导致立即从 Property Set 过程中退出。程序将继续执行调用 Property Set 过程之后的语句。Exit Property 语句的数量不受限制，可以出现在 Property Set 过程中的任何位置。

注意 每个 Property Set 语句都必须为所定义的过程至少定义一个参数。当 Property Set 语句所定义的过程被调用时，该参数（在多个参数时为最后一个参数）将为属性提供实际的对象引用。在前面的语法中，该参数称为引用。

与 Function 和 Property Get 过程类似，Property Set 过程是一个单独的过程，它可以有若干参数，执行一系列的语句，还可以改变参数的值。然而，与 Function 和 Property Get 过程不同的是，函数和过程都可以返回值，而 Property Set 过程对象引用赋值（Set 语句）的左侧。

要求

版本 5

请参阅

Class 语句 | Dim 语句 | Exit 语句 | Function 语句 | Private 语句 | Property Get 语句 | Property Let 语句 | Public 语句 | Set 语句 | Sub 语句


Public 语句

定义公有变量并分配存储空间。在 Class 块中定义私有变量。

Public varname[([subscripts])][, varname[([subscripts])]] . . .

参数

varname
变量的名称，遵循标准变量命名规则。
subscripts
数组变量的维数；最多可以声明 60 维的数组。subscripts 参数使用下列语法：

upper [,upper] . . .

数组的下界总是 0。

说明

Public 语句变量可用于全部脚本中的所有过程。

在使用引用对象的变量之前，必须用 Set 语句将某个已有对象赋予该变量。在赋值之前，所声明的对象变量被初始化为 Empty。

也可用带空圆括号的 Public 语句来声明动态数组。声明动态数组后，可在过程内使用 ReDim 语句来定义该数组的维数和元素。如果试图重新声明数组变量的维数，且此数组变量的大小已在 Private、Public 或 Dim 语句中显式地指定，则会发生错误。

下面例子举例说明如何使用 Public 语句:

Public MyNumber   ' 公用 Variant 变量。
Public MyArray(9)   ' 公用数组变量。
   ' Variant 变量的多个公用声明。
Public MyNumber, MyVar, YourNumber

要求

版本 1

请参阅

Dim 语句 | Private 语句 | ReDim 语句 | Set 语句


Randomize 语句

初始化随机数生成器。

Randomize [number]

number 参数可以是任何有效的数值表达式。

说明

Randomize 使用 number 参数初始化 Rnd 函数的随机数生成器，赋给它新的种子值。如果省略 number，则使用系统计时器返回的值作为新的种子值。

如果不使用 Randomize，则第一次调用 Rnd 函数（无参数）时，它将使用相同的数字作为种子值，随后使用最后生成的数值作为种子值。

注意 要重复随机数的序列，请在使用数值参数调用 Randomize 之前，立即用负值参数调用 Rnd。使用相同的 number 值的 Randomize 不能重复先前的随机数序列。

下面例子举例说明如何使用 Randomize 语句:

Dim MyValue, Response
Randomize   '初始化随机数生成器。
Do Until Response = vbNo
   MyValue = Int((6 * Rnd) + 1)   ' 产生 1 到 6 之间的随机数。
   MsgBox MyValue
   Response = MsgBox ("Roll again? ", vbYesNo)
Loop

要求

版本 1

请参阅

Rnd 函数 | Timer 函数


ReDim 语句

在过程级中声明动态数组变量并分配或重新分配存储空间。

ReDim [Preserve] varname(subscripts) [, varname(subscripts)] . . .

参数

Preserve
当更改现有数组最后一维的大小时保留数据。
varname
变量名，遵循标准变量命名规则。
subscripts
数组变量的维数，最多可以声明 60 维数组。subscripts 参数语法格式如下：

upper [,upper] . . .

数组的下界总是零。

说明

ReDim 语句通常用于指定或修改动态数组的大小，这些数组已用带有空括号的 Private、Public 或 Dim 语句（没有维数下标）正式声明过。可以重复使用 ReDim 语句更改数组维数和元素数目。

如果使用了 Preserve 关键字，就只能调整数组最后维的大小，并且不能改变数组的维数。例如，如果数组只有一维，就可以修改该数组的大小，因为该维是最后的也是仅有的一维。但是，如果数组有两个或更多维，就只能改变末维的大小并保留数组内容。

这个例子说明如何不擦掉该数组中存在的数据，而增加动态数组的终止维数。

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
警告 如果减小数组的大小，则将丢失被排除的元素中的数据。

变量初始化时，数值变量初始化为 0，字符串变量初始化为零长度字符串 ("")。在使用引用对象的变量前，必须使用 Set 语句将某个现有对象赋予该变量。在进行对象赋值以前，已声明的对象变量有特定值 Nothing。

要求

版本 1

请参阅

Dim 语句 | Set 语句


Rem 语句

包含程序中的解释性注释。

Rem comment

或

' comment

comment 参数是需要包含的注释文本。在 Rem 关键字和 comment 之间应有一个空格。

说明

正如“语法”部分所示，可以用单引号 (') 代替 Rem 关键字。如果 Rem 关键字和语句在同一行，需要用分号来分隔它们。但如果使用单引号，则不需要在单引号和语句之间使用分号。

下面例子举例说明如何使用 Rem 语句:

Dim MyStr1, MyStr2
MyStr1 = "Hello" : Rem 语句和注释用冒号隔开。
MyStr2 = "Goodbye" ' 这同样是注释不需要冒号。
Rem 在没有代码的行上加注释不必用冒号。

要求

版本 1


Select Case 语句

根据表达式的值执行几组语句之一。

Select Case testexpression
[Case expressionlist-n
[statements-n]] . . .
[Case Else expressionlist-n
[elsestatements-n]]
End Select

参数

testexpression
任意数值或字符串表达式。
expressionlist-n
如 Case 出现则必选项。一个或多个表达式的分界列表。
statements-n
当 testexpression 与 expressionlist-n 中的任意部分匹配时，执行的一条或多条语句。
elsestatements-n
当 testexpression 与 Case 子句的任何部分不匹配时，执行的一条或多条语句。

说明

如果 testexpression 与任何 Case expressionlist 表达式匹配，则执行此 Case 子句和下一个 Case 子句之间的语句，对于最后的子句，则会执行该子句到 End Select 之间的语句，然后控制权会转到 End Select 之后的语句。如 testexpression 与多个 Case 子句中的 expressionlist 表达式匹配，则只有第一个匹配后的语句被执行。

Case Else 用于指示若在 testexpression 和任何其他 Case 选项的 expressionlist 之间未找到匹配，则执行 elsestatements。虽然不是必要的，但最好是将 Case Else 语句置于 Select Case 块中以处理不可预见的 testexpression 值。如果没有 Case expressionlist 与 testexpression 匹配且无 Case Else 语句，则继续执行 End Select 之后的语句。

Select Case 语句可以是嵌套的，每一层嵌套的 Select Case 语句必须有与之匹配的 End Select 语句。

下面例子举例说明如何使用 Select Case 语句:

Dim Color, MyVar
Sub ChangeBackground (Color)
   MyVar = lcase (Color)
   Select Case MyVar
      Case "red"     document.bgColor = "red"
      Case "green"   document.bgColor = "green"
      Case "blue"    document.bgColor = "blue"
      Case Else      MsgBox "选择另一种颜色"
   End Select
End Sub

要求

版本 1

请参阅

If...Then...Else 语句


Set 语句

将对象引用赋给一个变量或属性，或者将对象引用与事件关联。

Set objectvar = {objectexpression | New classname | Nothing}

-或者-

Set object.eventname = GetRef(procname)

参数

objectvar
必选项，变量或属性名称;符合标准变量命名规则。
objectexpression
可选项，与对象名称一致的表达式,另一个相同对象类型、函数或方法的已声明变量，它们返回相同对象类型的对象。
New
用于创建一个类的新实例的关键字。如果 objectvar 包含一个对某个对象的引用，当一个新的引用被赋给这个对象之后，则这个引用将被释放。New 关键仅用于创建一个类的实例。
classname
可选项. 创建的类名称。使用 Class 语句定义类及其语句。
Nothing
可选项。断开 objectvar 与任何指定对象或类的关联。当没有其他变量引用前面的引用对象时，将 objectvar 赋值为 Nothing 以释放与前面的引用对象相关联的系统或内存资源。
object
必选项。与 event 相关联的对象名称。
event
必选项。函数作用域的事件名称。
procname
必选项。包含与event 相关联的 Sub 或 Function 名称的字符串。

说明

为了使其有效，objectvar 必须与赋值的对象类型相一致。

Dim、Private、Public 或 ReDim 语句仅声明一个引用对象的变量。在使用. Set 语句为一个具体对象赋值之前，没有实际对象可以引用。

通常, 当您使用 Set 语句将一个对象引用赋给一个变量之前,不会创建那个变量的对象的副本。实际上,只创建了一个对象的引用。多个引用对象变量可以引用相同的对象。因为这些变量都是对象的引用，而不是对对象副本的引用，因此对象中所作的任何变化都可以在引用该对象的所有变量中反映出来。

Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName  & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function

利用 New 关键字，您可以随时创建一个类的实例，并将一个对象引用变量赋值给它。赋给类的实例的变量一定利用 Dim (或相似的语句)语句事先已经声明。

有关使用 Set 语句关联一个过程与对象的详细信息，请参考 GetRef 函数的文档。

要求

版本 1

请参阅

= 运算符 | Dim 语句 | GetRef 函数 | ReDim 语句


Sub 语句

声明 Sub 过程的名称、参数以及构成其主体的代码。

[Public [Default] | Private] Sub name [(arglist)]
   [statements]
   [Exit Sub]
   [statements]
End Sub

参数

Public
表示 Sub 过程可被所有脚本中的所有其他过程访问。
Default
只与 类块中的Public 关键字连用，用来表示 Sub 过程是类的默认方法。如果在类中指定了不止一个Default过程，就会出错。
Private
表示 Sub 过程只可被声明该过程的脚本中的其他过程访问。
name
Sub 的名称，遵循标准变量命名规则。
arglist
代表在调用时要传递给 Sub 过程的参数的变量列表。用逗号隔开多个变量。
statements
在 Sub 过程主体内所执行的任何语句组。

arglist 参数包含下列语法和部分：

[ByVal | ByRef] varname[( )]

参数

ByVal
表示该参数是按值传递的。
ByRef
表示该参数按引用传递。
varname
代表参数的变量名称，遵循标准变量命名规则。

说明

如没有显式地指定使用 Public 或 Private，则 Sub 过程默认为公用，即它们对于脚本中的所有其他过程都是可见的。Sub 过程中局部变量的值在调用过程中不被保留。

不能在任何其他过程（例如，Function 或 Property Get）中定义 Sub 过程。

使用 Exit Sub 语句可以立即从 Sub 过程中退出。程序继续执行调用 Sub 过程的语句之后的语句。可以在 Sub 过程中任意位置出现任意个 Exit Sub 语句。

与 Function 过程相似之处是：Sub 过程是一个可以获取参数，执行一系列语句以及可改变其参数的值的独立过程。而与 Function 过程不同之处是：Function 过程可以返回值，而 Sub 过程不能用于表达式中。

可以使用过程名并跟随相应的参数列表来调用 Sub 过程。关于如何调用 Sub 过程的详细说明信息，请参阅 Call 语句。

警告 Sub 过程可以是递归的，即该过程可以调用自己来完成某个给定的任务。但是递归可能会导致堆栈溢出。

在 Sub 过程中使用的变量分为两类：一类是在过程内显式声明的，另一类则不是。在过程内显式声明的变量（使用 Dim 或等效方法）总是局部变量。对于那些没有在过程中显式声明的变量也是局部的，除非在该过程外更高级别的位置显式地声明它们。

警告 过程可以使用没有在过程内显式声明的变量，但只要有任何 script 级定义的名称与之同名，就会产生名称冲突。如果过程中引用的未声明的变量与其他的过程、常数或变量的名称相同，则会认为过程引用的是脚本级的名称。要避免这类冲突，请使用 Option Explicit 语句可强制显式声明变量。

要求

版本 1

请参阅

Call 语句 | Dim 语句 | Exit 语句 | Function 语句


While...Wend 语句

当指定的条件为 True 时，执行一系列的语句。

While condition
&nbsp；  Version [statements]
Wend

参数

condition
数值或字符串表达式，其计算结果为 True 或 False。如果 condition 为 Null，则 condition 被当作 False。
statements
在条件为 True 时执行的一条或多条语句。

说明

如果 condition 为 True，则 statements 中所有 Wend 语句之前的语句都将被执行，然后控制权将返回到 While 语句，并且重新检查 condition。如果 condition 仍为 True，则重复执行上面的过程。如果不为 True，则从 Wend 语句之后的语句继续执行程序。

While...Wend 循环可以是多层嵌套结构。每个 Wend 与最近的 While 语句对应。

注意 Do...Loop 语句提供一种结构化与适应性更强的方法以执行循环。

下面例子举例说明如何使用 While...Wend 语句:

Dim Counter
Counter = 0   ' 初始化变量。
While Counter < 20   ' 测试计数器的值。
   Counter = Counter + 1   ' 增加计数器。
   Alert Counter
Wend   ' 计数器大于 19 时终止循环。

要求

版本 1

请参阅

Do...Loop 语句


With 语句 (VBScript)

Visual Basic Scripting Edition

With 语句

对一个对象执行一系列的语句。

With object
    statements
End With

参数

object
必需的部分。可以是一个对象名称，也可以是返回值为对象的一个函数。
statements
必需的部分。将要对 object 执行的一个或多个命令。

说明

With 语句可以用来对指定的对象执行一系列的语句，但不需要重复地说明对象的名称。例如，如果要修改一个对象的多个属性，可以将所有属性赋值语句放在 With 控制结构中，这样对对象的引用就只需要一次，而不是在每个赋值语句中都引用。下面的例子说明如何使用 With 语句对同一个对象的几个属性进行赋值。

With MyLabel
   .Height = 2000
   .Width = 2000
   .Caption = "这是MyLabel"
End With

尽管属性操作是使用 With 语句最多的情况，它的用法并不仅限于此。With 块中可以使用任何合法的语句。

注意 一旦进入了 With 块，object是不可改变的。因此，不能使用一个With语句去改变若干对象的值。

可以嵌套使用 With 语句，将一个 With 块写在另一个块中。然而，由于外部的 With 块的成员被内部的 With 块掩盖，无论内部的 With 块要引用外部的 With 块中的某个对象的什么成员，都必须使用完全限定的对象引用。

重要 不要跳入或跳出 With 块。如果执行了 With 块中的语句却没有执行 With 或 End With 语句，结果将引发错误或其他难以预见的行为。

要求

版本 1

请参阅

Set 语句


Dictionary 对象

存储数据键和项目对的对象。

说明

Dictionary 对象等价于 PERL 联合数组。项目可以是数据的任何形式，并存储在数组中。每个项目都与一个具有唯一性的键相联。该键用于取得单个项目，并且通常是整数或字符串，但也可以是除数组以外的任何类型。

下面代码演示了如何创建 Dictionary 对象:

[JScript]
var y = new ActiveXObject("Scripting.Dictionary");
y.add ("a", "test");
if (y.Exists("a"))
   document.write("true");
...
[VBScript]
Dim d   ' 创建变量。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' 添加一些关键字和项目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...

方法

Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Keys 方法 | Remove 方法 | RemoveAll 方法

属性

Count 属性 | Item 属性 | Key 属性

请参阅

FileSystemObject 对象 | TextStream 对象


Count 属性

返回一个集合或 Dictionary 对象中的项目数。只读属性。

object.Count

其中 object 总是“应用于”列表中一个项目的名称。

说明

下面这段代码说明了 Count 属性的用法：

[JScript]
function CountDemo()
{
   var a, d, i, s;                 // 创建一些变量。
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add ("a", "Athens");          // 添加一些关键字和项目。
   d.Add ("b", "Belgrade");
   d.Add ("c", "Cairo");
   a = (new VBArray(d.Keys()));    // 获取关键字。
   s = "";
   for (i = 0; i < d.Count; i++)   //遍历 dictionary。
   {
      s += a.getItem(i) + " - " + d(a.getItem(i)) + "<br>";
   }
   return(s);                      // 返回结果。
}
[VBScript]
Function ShowKeys
   Dim a, d, i, s   ' 创建一些变量。
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 添加一些关键字和项目。
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   a = d.Keys   ' Get the keys.
   For i = 0 To d.Count -1 ' 遍历数组。
      s = s & a(i) & "<BR>" ' 创建返回字符串。
   Next
   ShowKeys = s
End Function

请参阅

CompareMode 属性 | Item 属性 | Key 属性

应用于：Dictionary 对象 | Drives 集合 | Files 集合 | Folders 集合


Item 属性 (FileSystemObject)

脚本运行时库

Item 属性

在一个 Dictionary 对象中设置或者返回所指定 key 的 item。对于集合则根据所指定的 key 返回一个 item。读/写。

object.Item(key)[ = newitem]

参数

object
必选项。总是一个集合的名称或 Dictionary 对象的名称。
key
必选项。与要被查找或添加的 item 相关联的 key。
newitem
可选项。仅适用于 Dictionary 对象；对于集合不可使用此项。如果提供了此项，newitem 就是与所指定的 key 相关联的新值。

说明

如果在改变一个 key 的时候没有找到该 item，那么将利用所指定的 newitem 创建一个新的 key。如果在试图返回一个已有项目的时候没有找到 key，那么将创建一个新的 key 且其相关的项目被设置为空。

下面这个例子说明了 Item 属性的用法。

[JScript]
function DicTest(keyword)
{
   var a, d;
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add("a", "Athens");
   d.Add("b", "Belgrade");
   d.Add("c", "Cairo");
   a = d.Item(keyword);
   return(a);
}
[VBScript]
Function ItemDemo
   Dim d   ' Create some variables.
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 添加一些关键字和项目。
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   ItemDemo = d.Item("c")   ' 获取项目。
End Function

请参阅

CompareMode 属性 | Count 属性 | Key 属性

应用于：Dictionary 对象 | Drives 集合 | Files 集合 | Folders 集合


Key 属性

在 Dictionary 对象中设置一个 key。

object.Key(key) = newkey

Arguments

object
必选项。总是一个 Dictionary 对象的名称。
key
必选项。被改变的 key 值。
newkey
必选项。替换所指定的 key 的新值。

说明

如果在改变一个 key 时没有发现该 key，那么将创建一个新的 key 并且其相关联的 item 被设置为空。

下面这段代码说明了 Key 属性的用法：

[JScript]
var d;
d = new ActiveXObject("Scripting.Dictionary");

function AddStuff()
{
   var a;
   d.Add("a", "Athens");
   d.Add("b", "Belgrade");
   d.Add("c", "Cairo");
}

function ChangeKey(oldkey, newkey)
{
   var s;
   d.Key("c") = "Ca";
   s = "Key " + oldkey + " changed to " + newkey;
   return(s);
}
[VBScript]
Function DicDemo
   Dim d   ' 创建一些变量。
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 添加一些关键字和项目。
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   d.Key("c") = "d"   ' 将 "c" 的关键字设为 "d"。
   DicDemo = d.Item("d")   ' 返回相关项目。
End Function

请参阅

CompareMode 属性 | Count 属性 | Item 属性

应用于：Dictionary 对象


Add 方法 (Dictionary)

向 Dictionary 对象中添加一个关键字项目对。

object.Add (key, item)

参数

object
必选项。总是一个 Dictionary 对象的名称。
key
必选项。与被添加的 item 相关联的 key。
item
必选项。与被添加的 key 相关联的 item。

说明

如果 key 已经存在，那么将导致一个错误。

下面这个例子说明了 Add 方法的用法。

[JScript]
var d;
d = new ActiveXObject("Scripting.Dictionary");
d.Add("a", "Athens");
d.Add("b", "Belgrade");
d.Add("c", "Cairo");
[VBScript]
Dim d   ' 创建变量。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' 添加一些关键字和项目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"

请参阅

Add 方法 (Folders) | Exists 方法 | Items 方法 | Keys 方法 | Remove 方法 | RemoveAll 方法

应用于：Dictionary 对象


Exists 方法 (FileSystemObject)

脚本运行时库

Exists 方法

如果 Dictionary 对象中存在所指定的关键字则返回 true，否则返回 false。

object.Exists(key)

参数

object
必选项。总是一个 Dictionary 对象的名称。
key
必选项。需要在 Dictionary 对象中搜索的 key 值。

说明

下面这个例子说明了 Exists 方法的用法。

[JScript]
function keyExists(k)
{
   var fso, s = "";
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add("a", "Athens");
   d.Add("b", "Belgrade");
   d.Add("c", "Cairo");
   if (d.Exists(k))
      s += "Specified key exists.";
   else
      s += "Specified key doesn't exist.";
   return(s);
}
[VBScript]
Function KeyExistsDemo
   Dim d, msg   ' Create some variables.
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' Add some   keys and items.
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   If d.Exists("c") Then
      msg = "Specified key exists."
   Else
      msg = "Specified key doesn't exist."
   End If
   KeyExistsDemo = msg
End Function

请参阅

Add 方法 (Dictionary) | Items 方法 | Keys 方法 | Remove 方法 | RemoveAll 方法
应用于：Dictionary 对象


Items 方法

返回一个数组，其中包含了一个 Dictionary 对象中的所有项目。

object.Items( )

其中 object 总是一个 Dictionary 对象的名称。

说明

下面这段代码说明了 Items 方法的用法：

[JScript]
function ItemsDemo()
{
   var a, d, i, s;                  // 创建一些变量。
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add ("a", "Athens");              // 添加一些关键字和项目。
   d.Add ("b", "Belgrade");
   d.Add ("c", "Cairo");
   a = (new VBArray(d.Items())).toArray();   // 获取项目。
   s = "";
   for (i in a)                  // 遍历该 dictionary。
   {
      s += a[i] + "<br>";
   }
   return(s);                     // 返回结果。
}
[VBScript]
Function DicDemo
   Dim a, d, i, s   ' 创建一些变量。
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 添加一些关键字和项目。
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   a = d.Items   ' 获取项目。
   For i = 0 To d.Count -1 ' 迭代数组。
      s = s & a(i) & "<BR>" ' 创建返回字符串。
   Next
   DicDemo = s
End Function

请参阅

Add 方法 (Dictionary) | Exists 方法 | Keys 方法 | Remove 方法 | RemoveAll 方法
应用于：Dictionary 对象


Keys 方法

返回一个数组，其中包含了一个 Dictionary 对象中的全部现有的关键字。

object.Keys( )

其中 object 总是一个 Dictionary 对象的名称。

说明

下面这段代码说明了 Keys 方法的用法：

[JScript]
function KeysDemo()
{
   var a, d, i, s;                  // 创建一些变量。
   d = new ActiveXObject("Scripting.Dictionary");
   d.Add ("a", "Athens");              // 添加一些关键字和项目。
   d.Add ("b", "Belgrade");
   d.Add ("c", "Cairo");
   a = (new VBArray(d.Keys())).toArray();   // 获取关键字。
   s = "";
   for (i in a)                  // 遍历 dictionary。
   {
      s += a[i] + " - " + d(a[i]) + "<br>";
   }
   return(s);                     // 返回结果。
}
[VBScript]
Function DicDemo
   Dim a, d, i   ' 创建一些变量。
   Set d = CreateObject("Scripting.Dictionary")
   d.Add "a", "Athens"   ' 添加一些关键字和项目。
   d.Add "b", "Belgrade"
   d.Add "c", "Cairo"
   a = d.Keys   ' 获取关键字。
   For i = 0 To d.Count -1 ' 迭代数组。
      s = s & a(i) & "<BR>" ' 返回结果
   Next
   DicDemo = s
End Function

请参阅

Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Remove 方法 | RemoveAll 方法
应用于：Dictionary 对象


Remove 方法 (FileSystemObject)

脚本运行时库

Remove 方法

从一个 Dictionary 对象中删除一个关键字，项目对。

object.Remove(key)

参数

object
必选项。总是一个 Dictionary 对象的名称。
key
必选项。key 与要从 Dictionary 对象中删除的关键字，项目对相关联。

说明

如果所指定的关键字，项目对不存在，那么将导致一个错误。

下面这段代码说明了 Remove 方法的用法：

[JScript]
var a, d, i, s;              // 创建一些变量。
d = new ActiveXObject("Scripting.Dictionary");
d.Add ("a", "Athens");       // 添加一些关键字和项目。
d.Add ("b", "Belgrade");
d.Add ("c", "Cairo");
...
d.Remove("b");               //  第二对。
[VBScript]
Dim a, d   ' 创建一些变量。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' 添加一些关键字和项目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...
d.Remove("b")   ' 移除第二对。

请参阅

Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Keys 方法 | RemoveAll 方法
应用于：Dictionary 对象


RemoveAll 方法

RemoveAll 方法从一个 Dictionary 对象中删除所有的关键字，项目对。

object.RemoveAll( )

其中 object 总是一个 Dictionary 对象的名称。

说明

下面这段代码说明了 RemoveAll 方法的用法：

[JScript]
var a, d, i;             // 创建一些变量。
d = new ActiveXObject("Scripting.Dictionary");
d.Add ("a", "Athens");   // 添加一些关键字和项目。
d.Add ("b", "Belgrade");
d.Add ("c", "Cairo");
...
d.RemoveAll( );       // 清除字典。
[VBScript]
Dim a, d, i   ' 创建一些变量。
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"   ' 添加一些关键字和项目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
...
a = d.RemoveAll   ' 清除字典。

请参阅

Add 方法 (Dictionary) | Exists 方法 | Items 方法 | Keys 方法 | Remove 方法
应用于：Dictionary 对象


FileSystemObject

本节内容

脚本运行时参考
构成脚本运行时参考的元素列表。
FileSystemObject 基础
FileSystemObject 的基本知识指南。


FileSystemObject 基础

为 Active Server Page、Windows 脚本宿主或可以使用脚本的其他应用程序撰写脚本时，重要的是添加、移动、更改、创建或删除 Web 服务器上的文件夹（目录）和文件，同时还必须获取和使用 Web 服务器附加驱动器的有关信息。

利用脚本编辑，可使用 FileSystemObject (FSO) 对象模型处理驱动器、文件夹和文件。在以下章节中将对 FileSystemObject (FSO) 对象模型加以说明：

FileSystemObject 对象模型

FileSystemObject 对象模型使用户可以利用熟悉的 object.method 语法和各种属性、方法及事件来处理文件夹和文件。

FileSystemObject 对象

FileSystemObject 对象模型中对象和集合的列表。

设计 FileSystemObject

描述如何利用 FileSystemObject 编程。

处理驱动器和文件夹

描述如何使用 FileSystemObject 复制和移动文件夹，以及如何获得与驱动器和文件夹有关的信息。

处理文件

描述如何使用 FileSystemObject 处理文件。

FileSystemObject 示例代码

提供了一个真实的示例，演示 FileSystemObject 对象模型中的多种可用功能。


FileSystemObject 对象模型

FileSystemObject (FSO) 对象模型，允许对大量的属性、方法和事件，使用较熟悉的 object.method 语法，来处理文件夹和文件。

使用这个基于对象的工具和：

  • HTML 来创建 Web 页
  • Windows Scripting Host 来为 Microsoft Windows 创建批文件
  • Script Control 来对用其他语言开发的应用程序提供编辑脚本的能力

因为在客户端使用 FSO 而引起重要的安全性问题，提供潜在地不受欢迎的对客户端本地文件系统的访问，假定本文档使用 FSO 对象模型，来创建由服务器端的 Internet Web 页执行的脚本。因为使用了服务器端，Internet Explorer 默认安全设置不允许客户端使用 FileSystemObject 对象。覆盖那些默认值可能会引起在本地计算机上不受欢迎的对其文件系统的访问，从而导致文件系统完整性的全部破坏，同时引起数据遗失或更糟的情况。

FSO 对象模型使服务器端的应用程序能创建、改变、移动和删除文件夹，或探测特定的文件夹是否存在，若存在，还可以找出有关文件夹的信息，如名称、被创建或最后一次修改的日期，等等。

FSO 对象模型还使文件处理变得很容易。在处理文件时，主要的目标是以易于访问的格式把数据存储在有效的空间和资源中。这就要求能够创建文件，插入和改变数据，以及输出（读取）数据。因为把数据存储在数据库中，如 Access 或 SQL 服务器，会给应用程序增加很大的开销，所以把数据存储在二进制或文本文件中可能是最有效的解决方案。可能不希望有该开销，或者数据访问要求可能不需要与功能完备的数据库相关联的所有额外功能。

  • 包含在 Scripting 类型库 (Scrrun.dll) 中的 FSO 对象模型，支持通过 TextStream 对象来创建和操作文本文件。虽然还不支持二进制文件的创建或操作，但计划将来要支持二进制文件。


FileSystemObject 对象

FileSystemObject(FSO) 对象模型包含下面的对象和集合。

对象/集合 | 描述
FileSystemObject | 主对象。包含用来创建、删除和获得有关信息，以及通常用来操作驱动器、文件夹和文件的方法和属性。和该对象相关联的许多方法，与其他 FSO 对象中的方法完全相似；它们是为了方便才被提供的。
Drive | 对象。包含用来收集信息的方法和属性，这些信息是关于连接在系统上的驱动器的，如驱动器的共享名和它有多少可用空间。请注意，"drive" 并非必须是硬盘，也可以是 CD-ROM 驱动器，RAM 磁盘等等。并非必须把驱动器实物地连接到系统上；它也可以通过网络在逻辑上被连接起来。
Drives | 集合。提供驱动器的列表，这些驱动器实物地或在逻辑上与系统相连接。Drives 集合包括所有驱动器，与类型无关。要可移动的媒体驱动器在该集合中显现，不必把媒体插入到驱动器中。
File | 对象。包含用来创建、删除或移动文件的方法和属性。也用来向系统询问文件名、路径和多种其他属性。
Files | 集合。提供包含在文件夹内的所有文件的列表。
Folder | 对象。包含用来创建、删除或移动文件夹的方法和属性。也用来向系统询问文件夹名、路径和多种其他属性。
Folders | 集合。提供在 Folder 内的所有文件夹的列表。
TextStream | 对象。用来读写文本文件。


设计 FileSystemObject

要用 FileSystemObject (FSO) 对象模型来编程，则：

  • 使用 CreateObject 方法来创建 FileSystemObject 对象。
  • 在新创建的对象上使用适当的方法。
  • 访问对象的属性。

FSO 对象模型包含在 Scripting 类型库中，该库位于 Scrrun.dll 文件中。因而，要使用 FSO 对象模型，必须把 Scrrun.dll 放在 Web 服务器的适当系统目录中。

创建 FileSystemObject 对象

首先，使用 CreateObject 方法来创建 FileSystemObject 对象。

下面代码显示如何创建 FileSystemObject 实例：

[VBScript]
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
[JScript]
var fso;
fso = new ActiveXObject("Scripting.FileSystemObject");

在这两个示例中，Scripting 是类型库的名字，而 FileSystemObject 则是想要创建的对象的名字。可以只创建 FileSystemObject 对象的一个实例，而不管试图创建另一个实例的次数。

使用适当的方法

其次，使用 FileSystemObject 对象的适当方法。例如，要创建一个新的对象，则使用 CreateTextFile 或 CreateFolder （FSO 对象模型不支持驱动器的创建或删除）。

要删除对象，则使用 FileSystemObject 对象的 DeleteFile 和 DeleteFolder 方法，或 File 和 Folder 对象的 Delete 方法。也可以使用适当的方法，来复制和移动文件与文件夹。

注意 FileSystemObject 对象模型中的某些功能是多余的。例如，可以用 FileSystemObject 对象的 CopyFile 方法，也可以用 File 对象的 Copy 方法来复制文件。这两种方法功能是相同的；两种方法都能使编程灵活。

访问现有驱动器、文件和文件夹

要访问现有驱动器、文件或文件夹，则使用 FileSystemObject 对象中的适当的 "get" 方法：

  • GetDrive
  • GetFolder
  • GetFile

若要访问现有文件：

[VBScript]
Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.GetFile("c:\test.txt")
[JScript]
var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.GetFile("c:\\test.txt");

不要对新创建的对象使用 "get" 方法，因为 "create" 函数已经返回那个对象的一个句柄。例如，如果使用 CreateFolder 方法创建了一个新的文件夹，则不要使用 GetFolder 方法来访问它的属性，如 Name、Path、Size等等。只需设一个变量给 CreateFolder 函数，来获得新创建文件夹的句柄名，然后访问它的属性、方法和事件。

若要为 CreateFolder 函数创建变量，请使用该语法：

[VBScript]
Sub CreateFolder
   Dim fso, fldr
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set fldr = fso.CreateFolder("C:\MyTest")
   Response.Write "Created folder: " & fldr.Name
End Sub
[JScript]
function CreateFolder()
{
   var fso, fldr;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fldr = fso.CreateFolder("C:\\MyTest");
   Response.Write("Created folder: " + fldr.Name);
}

访问对象的属性

一旦有了对象的句柄，就可以访问它的属性。例如，要获得特定文件夹的名字，首先创建该对象的一个实例，然后用适当的方法获得它的句柄（在这个例子中是 GetFolder 方法，因为该文件夹已经存在了）。

用该代码来获得 GetFolder 方法的一个句柄：

[VBScript]
Set fldr = fso.GetFolder("c:\")
[JScript]
var fldr = fso.GetFolder("c:\\");

现在，已经有了 Folder 对象的句柄，就可以检查它的 Name 属性了。

[VBScript]
Response.Write "Folder name is: " & fldr.Name
[JScript]
Response.Write("Folder name is: " + fldr.Name);

要找出最后一次修改文件的时间，则使用下面的语法：

[VBScript]
Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
' 获得要查询的 File 对象。
Set f1 = fso.GetFile("c:\detlog.txt")
' 打印信息。
Response.Write "File last modified: " & f1.DateLastModified
[JScript]
var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
// 获得要查询的 File 对象。
f1 = fso.GetFile("c:\\detlog.txt");
// 打印信息。
Response.Write("File last modified: " + f1.DateLastModified);


处理驱动器和文件夹

使用 FileSystemObject (FSO) 对象模型，可以有计划地处理驱动器和文件夹，就像在 Windows 资源管理器中交互式地处理它们一样。可以复制和移动文件夹，获取有关驱动器和文件夹的信息，等等。

获取有关驱动器的信息

可以用 Drive 对象来获得有关各种驱动器的信息，这些驱动器是实物地或通过网络连接到系统上的。它的属性可以用来获得下面的信息内容：

  • 驱动器的总容量，以字节为单位（TotalSize 属性）
  • 驱动器的可用空间是多少，以字节为单位（AvailableSpace 或 FreeSpace 属性）
  • 哪个号被赋给了该驱动器（DriveLetter 属性）
  • 驱动器的类型是什么，如可移动的、固定的、网络的、CD-ROM 或 RAM 磁盘（DriveType 属性）
  • 驱动器的序列号（SerialNumber 属性）
  • 驱动器使用的文件系统类型，如 FAT、FAT32、NTFS 等等（FileSystem 属性）
  • 驱动器是否可以使用（IsReady 属性）
  • 共享和/或卷的名字（ShareName 和 VolumeName 属性）
  • 驱动器的路径或根文件夹（Path 和 RootFolder 属性）

请考察示例代码，来领会如何在 FileSystemObject 中使用这些属性。

Drive 对象的用法示例

使用 Drive 对象来收集有关驱动器的信息。在下面的代码中，没有对实际的 Drive 对象的引用；相反，使用 GetDrive 方法来获得现有 Drive 对象的引用（在这个例子中就是 drv）。

下面示例示范了如何使用 Drive 对象：

[VBScript]
Sub ShowDriveInfo(drvPath)
   Dim fso, drv, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & drv.VolumeName & "<br>"
   s = s & "Total Space: " & FormatNumber(drv.TotalSize / 1024, 0)
   s = s & " Kb" & "<br>"
   s = s & "Free Space: " & FormatNumber(drv.FreeSpace / 1024, 0)
   s = s & " Kb" & "<br>"
   Response.Write s
End Sub
[JScript]
function ShowDriveInfo1(drvPath)
{
   var fso, drv, s ="";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   drv = fso.GetDrive(fso.GetDriveName(drvPath));
   s += "Drive " + drvPath.toUpperCase()+ " - ";
   s += drv.VolumeName + "<br>";
   s += "Total Space: " + drv.TotalSize / 1024;
   s += " Kb" + "<br>";
   s += "Free Space: " + drv.FreeSpace / 1024;
   s += " Kb" + "<br>";
   Response.Write(s);
}

处理文件夹

在下面的表中，描述了普通的文件夹任务和执行它们的方法。

任务 | 方法
创建文件夹。 | FileSystemObject.CreateFolder
删除文件夹。 | Folder.Delete 或 FileSystemObject.DeleteFolder
移动文件夹。 | Folder.Move 或 FileSystemObject.MoveFolder
复制文件夹。 | Folder.Copy 或 FileSystemObject.CopyFolder
检索文件夹的名字。 | Folder.Name
如果文件夹在驱动器上存在，则找出它。 | FileSystemObject.FolderExists
获得现有 Folder 对象的实例。 | FileSystemObject.GetFolder
找出文件夹的父文件夹名。 | FileSystemObject.GetParentFolderName
找出系统文件夹的路径。 | FileSystemObject.GetSpecialFolder

请考察示例代码，来看看在 FileSystemObject 中使用了多少种这些的方法和属性。

下面的示例示范了如何使用 Folder 和 FileSystemObject 对象，来操作文件夹和获得有关它们的信息：

[VBScript]
Sub ShowFolderInfo()
   Dim fso, fldr, s
   ' 获取 FileSystemObject 的一个实例。
   Set fso = CreateObject("Scripting.FileSystemObject")
   ' 获取驱动器对象。
   Set fldr = fso.GetFolder("c:")
   ' 打印父文件夹名。
   Response.Write "Parent folder name is: " & fldr & "<br>"
   ' 打印驱动器名。
   Response.Write "Contained on drive " & fldr.Drive & "<br>"
   ' 打印根文件名。
   If fldr.IsRootFolder = True Then
      Response.Write "This is the root folder." & ""<br>"<br>"
   Else
      Response.Write "This folder isn't a root folder." & "<br><br>"
   End If
   ' 用 FileSystemObject 对象新建文件夹。
   fso.CreateFolder ("C:\Bogus")
   Response.Write "Created folder C:\Bogus" & "<br>"
   ' 打印文件夹的基本名。
   Response.Write "Basename = " & fso.GetBaseName("c:\bogus") & "<br>"
   ' 删除新建文件夹。
   fso.DeleteFolder ("C:\Bogus")
   Response.Write "Deleted folder C:\Bogus" & "<br>"
End Sub
[JScript]
function ShowFolderInfo()
{
   var fso, fldr, s = "";
   // 获取 FileSystemObject 的一个实例。
   fso = new ActiveXObject("Scripting.FileSystemObject");
   // 获取驱动器名。
   fldr = fso.GetFolder("c:");
   // 打印父文件夹名。
   Response.Write("Parent folder name is: " + fldr + "<br>");
   // 打印驱动器名。
   Response.Write("Contained on drive " + fldr.Drive + "<br>");
   // 打印根文件名。
   if (fldr.IsRootFolder)
     Response.Write("This is the root folder.");
   else
     Response.Write("This folder isn't a root folder.");
   Response.Write("<br><br>");
   // 用 FileSystemObject 对象新建文件夹。
   fso.CreateFolder ("C:\\Bogus");
   Response.Write("Created folder C:\\Bogus" + "<br>");
   // 打印文件夹的基本名。
   Response.Write("Basename = " + fso.GetBaseName("c:\\bogus") + "<br>");
   // 删除新建的文件夹。
   fso.DeleteFolder ("C:\\Bogus");
   Response.Write("Deleted folder C:\\Bogus" + "<br>");
}


处理文件

有两种主要的文件处理类型：

  • 创建、添加或删除数据，以及读取文件
  • 移动、复制和删除文件

创建文件

创建空文本文件（有时被叫做“文本流”）有三种方法。

第一种方法是用 CreateTextFile 方法。下面的示例示范了如何用 CreateTextFile 方法创建文本文件：

[VBScript]
Dim fso, f1
Set fso = CreateObject("Scripting.FileSystemObject")
Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
[JScript]
var fso, f1;
fso = new ActiveXObject("Scripting.FileSystemObject");
f1 = fso.CreateTextFile("c:\\testfile.txt", true);

创建文本文件的第二种方法是，使用 FileSystemObject 对象的 OpenTextFile 方法，并设置 ForWriting 标志。

[VBScript]
Dim fso, ts
Const ForWriting = 2
Set fso = CreateObject("Scripting. FileSystemObject")
Set ts = fso.OpenTextFile("c:\test.txt", ForWriting, True)
[JScript]
var fso, ts;
var ForWriting= 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);

创建文本文件的第三种方法是，使用 OpenAsTextStream 方法，并设置 ForWriting 标志。要使用这种方法，使用下面的代码：

[VBScript]
Dim fso, f1, ts
Const ForWriting = 2
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CreateTextFile ("c:\test1.txt")
Set f1 = fso.GetFile("c:\test1.txt")
Set ts = f1.OpenAsTextStream(ForWriting, True)
[JScript]
var fso, f1, ts;
var ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CreateTextFile ("c:\\test1.txt");
f1 = fso.GetFile("c:\\test1.txt");
ts = f1.OpenAsTextStream(ForWriting, true);

添加数据到文件中

一旦创建了文本文件，使用下面的三个步骤向文件添加数据：

打开文本文件。

写入数据。

关闭文件。

要打开现有的文件，则使用 FileSystemObject 对象的 OpenTextFile 方法或 File 对象的 OpenAsTextStream 方法。

要写数据到打开的文本文件，则根据下表所述任务使用 TextStream 对象的 Write、WriteLine 或 WriteBlankLines 方法。

任务 | 方法
向打开的文本文件写数据，不用后续一个新行字符。 | Write
向打开的文本文件写数据，后续一个新行字符。 | WriteLine
向打开的文本文件写一个或多个空白行。 | WriteBlankLines

要关闭一个打开的文件，则使用 TextStream 对象的 Close 方法。

注意 新行字符包含一个或几个字符（取决于操作系统），以把光标移动到下一行的开始位置（回车/换行）。注意某些字符串末尾可能已经有这个非打印字符了。

下面的例子示范了如何打开文件，和同时使用三种写方法来向文件添加数据，然后关闭文件：

[VBScript]
Sub CreateFile()
   Dim fso, tf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set tf = fso.CreateTextFile("c:\testfile.txt", True)
   ' 写一行，并带有一个新行字符。
   tf.WriteLine("Testing 1, 2, 3.")
   '  向文件写三个新行字符。
   tf.WriteBlankLines(3)
   ' 写一行。
   tf.Write ("This is a test.")
   tf.Close
End Sub
[JScript]
function CreateFile()
{
   var fso, tf;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   tf = fso.CreateTextFile("c:\\testfile.txt", true);
   // 写一行，并带有一个新行字符。
   tf.WriteLine("Testing 1, 2, 3.") ;
   // 向文件写三个新行字符。
   tf.WriteBlankLines(3) ;
   // 写一行。
   tf.Write ("This is a test.");
   tf.Close();
}

读取文件

要从文本文件读取数据，则使用 TextStream 对象的 Read、ReadLine 或 ReadAll 方法。下表描述了不同的任务应使用哪种方法。

任务 | 方法
从文件读取指定数量的字符。 | Read
读取一整行（一直到但不包括新行字符）。 | ReadLine
读取文本文件的整个内容。 | ReadAll

如果使用 Read 或 ReadLine 方法，并且想跳过数据的特殊部分，则使用 Skip 或 SkipLine 方法。read 方法的结果文本存在一个字符串中，该字符串可以显示在一个控件中，也可以用字符串函数（如 Left、Right 和 Mid）来分析，连接等等。

下面的例子示范了如何打开文件，和如何写数据到文件中并从文件读取数据：

[VBScript]
Sub ReadFiles
   Dim fso, f1, ts, s
   Const ForReading = 1
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
   ' 写入一行。
   Response.Write "Writing file <br>"
   f1.WriteLine "Hello World"
   f1.WriteBlankLines(1)
   f1.Close
   ' 读取文件内容。
   Response.Write "Reading file <br>"
   Set ts = fso.OpenTextFile("c:\testfile.txt", ForReading)
   s = ts.ReadLine
   Response.Write "File contents = '" & s & "'"
   ts.Close
End Sub
[JScript]
function ReadFiles()
{
   var fso, f1, ts, s;
   var ForReading = 1;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f1 = fso.CreateTextFile("c:\\testfile.txt", true);
   // 写入一行。
   Response.Write("Writing file <br>");
   f1.WriteLine("Hello World");
   f1.WriteBlankLines(1);
   f1.Close();
   // 读取文件内容。
   Response.Write("Reading file <br>");
   ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   s = ts.ReadLine();
   Response.Write("File contents = '" + s + "'");
   ts.Close();
}

移动、复制和删除文件

FSO 对象模型各有两种方法移动、复制和删除文件，如下表所述。

任务 | 方法
移动文件 | File.Move 或 FileSystemObject.MoveFile
复制文件 | File.Copy 或 FileSystemObject.CopyFile
删除文件 | File.Delete 或 FileSystemObject.DeleteFile

下面示例在驱动器 C 的根目录中创建一个文本文件，向其中写一些信息，然后把它移动到 \tmp 目录中，并在 \temp 中做一个备份，最后把它们从两个目录中删掉。

要运行下面的示例，需要先在驱动器 C 的根目录中创建 \tmp 和 \temp 目录：

[VBScript]
Sub ManipFiles
   Dim fso, f1, f2, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
   Response.Write "Writing file <br>"
   ' 写入一行。
   f1.Write ("This is a test.")
   ' 关闭写入到的文件。
   f1.Close
   Response.Write "Moving file to c:\tmp <br>"
   ' 获取到 C:\ 根目录中文件的句柄。
   Set f2 = fso.GetFile("c:\testfile.txt")
   ' 将文件移到 \tmp 目录。
   f2.Move ("c:\tmp\testfile.txt")
   Response.Write "Copying file to c:\temp <br>"
   ' 将文件复制到 \temp。
   f2.Copy ("c:\temp\testfile.txt")
   Response.Write "Deleting files <br>"
   ' 获得文件当前位置的句柄。
   Set f2 = fso.GetFile("c:\tmp\testfile.txt")
   Set f3 = fso.GetFile("c:\temp\testfile.txt")
   ' 删除文件。
   f2.Delete
   f3.Delete
   Response.Write "All done!"
End Sub
[JScript]
function ManipFiles()
{
   var fso, f1, f2, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f1 = fso.CreateTextFile("c:\\testfile.txt", true);
   Response.Write("Writing file <br>");
   // 写入一行。
   f1.Write("This is a test.");
   // 关闭写入到的文件。
   f1.Close();
   Response.Write("Moving file to c:\\tmp <br>");
   // 获取到 C:\ 根目录中文件的句柄。
   f2 = fso.GetFile("c:\\testfile.txt");
   // 将文件移到 \tmp 目录。
   f2.Move ("c:\\tmp\\testfile.txt");
   Response.Write("Copying file to c:\\temp <br>");
   // 将文件复制到 \temp。
   f2.Copy ("c:\\temp\\testfile.txt");
   Response.Write("Deleting files <br>");
   // 获得文件当前位置的句柄。
   f2 = fso.GetFile("c:\\tmp\\testfile.txt");
   f3 = fso.GetFile("c:\\temp\\testfile.txt");
   // 删除文件。
   f2.Delete();
   f3.Delete();
   Response.Write("All done!");
}


FileSystemObject 示例代码

在本节描述的示例代码，提供真实的例子来示范在 FileSystemObject 对象模型中可用的许多功能。该代码显示了如何一起使用对象模型的所有功能，以及如何在您自己的代码中有效地使用这些功能。

请注意，由于该代码是极一般的，所以要使该代码能够真正在您的机器上运行，可能需要一些其他代码和小小的变更。这些改变之所以必要，是因为在 Active Server Pages 和 Windows Scripting Host 之间，为输入和输出给用户采用了不同的方法。

要在 Active Server Pages 上运行该代码，则采取以下步骤：

创建一个标准的 Web 页，后缀名为 .asp。

把下面的示例代码复制到 <BODY>...</BODY> 标记之间的文件中。

把所有代码包装器到 <%...%> 标记内。

把 Option Explicit 语句从当前位置移动到 HTML 页的最顶部，甚至在 <HTML> 开始标记前。

把 <%...%> 标记放置在 Option Explicit 语句周围，以保证它在服务器端运行。

把下面的代码添加到示例代码末尾：

Sub Print(x)
   Response.Write "<PRE>&ltFONT FACE=""Courier New"" SIZE=""1"">"
   Response.Write x
   Response.Write "</FONT></PRE>"
End Sub
Main

前面的代码增加一个将在服务器端运行，但在客户端显示结果的打印过程。要在 Windows Scripting Host 上运行该代码，则把下面的代码添加到示例代码的末尾：

Sub Print(x)
   WScript.Echo x
End Sub
Main

下面就是示例代码：

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' FileSystemObject 示例代码
'Copyright 1998  Microsoft Corporation。 保留所有权利。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Option Explicit

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 对于代码质量：
' 1) 下面的代码有许多字符串操作，用"&"运算符来把短字符串连接在一起。由于
'    字符串连接是费时的，所以这是一种低效率的写代码方法。无论如何，它是
'    一种非常好维护的写代码方法，并且在这儿使用了这种方法，因为该程序执行
'    大量的磁盘操作，而磁盘操作比连接字符串所需的内存操作要慢得多。
'    记住这是示范代码，而不是产品代码。
'
' 2) 使用了 "Option Explicit"，因为访问声明过的变量，比访问未声明的变量要
'    稍微快一些。它还能阻止在代码中发生错误，例如，把 DriveTypeCDROM 误拼
'    成了 DriveTypeCDORM 。
'
' 3) 为了使代码更可读，该代码中没有错误处理。虽然采取了防范措施，来保证代码
'    在普通情况下没有错误，但文件系统是不可预知的。在产品代码中，使用
'    On Error Resume Next 和 Err 对象来捕获可能发生的错误。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 一些容易取得的全局变量
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim TabStop
Dim NewLine

Const TestDrive = "C"
Const TestFilePath = "C:\Test"

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 由 Drive.DriveType 返回的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const DriveTypeRemovable = 1
Const DriveTypeFixed = 2
Const DriveTypeNetwork = 3
Const DriveTypeCDROM = 4
Const DriveTypeRAMDisk = 5

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 由 File.Attributes 返回的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const FileAttrNormal  = 0
Const FileAttrReadOnly = 1
Const FileAttrHidden = 2
Const FileAttrSystem = 4
Const FileAttrVolume = 8
Const FileAttrDirectory = 16
Const FileAttrArchive = 32
Const FileAttrAlias = 64
Const FileAttrCompressed = 128

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 用来打开文件的常数
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Const OpenFileForReading = 1
Const OpenFileForWriting = 2
Const OpenFileForAppending = 8

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ShowDriveType
' 目的：
' 生成一个字符串，来描述给定 Drive 对象的驱动器类型。
' 示范下面的内容
' - Drive.DriveType
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Function ShowDriveType(Drive)

   Dim S

   Select Case Drive.DriveType
   Case DriveTypeRemovable
      S = "Removable"
   Case DriveTypeFixed
      S = "Fixed"
   Case DriveTypeNetwork
      S = "Network"
   Case DriveTypeCDROM
      S = "CD-ROM"
   Case DriveTypeRAMDisk
      S = "RAM Disk"
   Case Else
      S = "Unknown"
   End Select

   ShowDriveType = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' ShowFileAttr
' 目的：
' 生成一个字符串，来描述文件或文件夹的属性。
' 示范下面的内容
' - File.Attributes
' - Folder.Attributes
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function ShowFileAttr(File) ' File 可以是文件或文件夹

   Dim S
   Dim Attr

   Attr = File.Attributes

   If Attr = 0 Then
      ShowFileAttr = "Normal"
      Exit Function
   End If

   If Attr And FileAttrDirectory Then S = S & "Directory "
   If Attr And FileAttrReadOnly Then S = S & "Read-Only "
   If Attr And FileAttrHidden Then S = S & "Hidden "
   If Attr And FileAttrSystem Then S = S & "System "
   If Attr And FileAttrVolume Then S = S & "Volume "
   If Attr And FileAttrArchive Then S = S & "Archive "
   If Attr And FileAttrAlias Then S = S & "Alias "
   If Attr And FileAttrCompressed Then S = S & "Compressed "

   ShowFileAttr = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateDriveInformation
' 目的：
' 生成一个字符串，来描述可用驱动器的当前状态。
' 示范下面的内容
'  - FileSystemObject.Drives
'  - Iterating the Drives collection
'  - Drives.Count
'  - Drive.AvailableSpace
'  - Drive.DriveLetter
'  - Drive.DriveType
'  - Drive.FileSystem
'  - Drive.FreeSpace
'  - Drive.IsReady
'  - Drive.Path
'  - Drive.SerialNumber
'  - Drive.ShareName
'  - Drive.TotalSize
'  - Drive.VolumeName
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateDriveInformation(FSO)

   Dim Drives
   Dim Drive
   Dim S

   Set Drives = FSO.Drives
   S = "Number of drives:" & TabStop & Drives.Count & NewLine & NewLine

   ' 构造报告的第一行。
   S = S & String(2, TabStop) & "Drive"
   S = S & String(3, TabStop) & "File"
   S = S & TabStop & "Total"
   S = S & TabStop & "Free"
   S = S & TabStop & "Available"
   S = S & TabStop & "Serial" & NewLine

   ' 构造报告的第二行。
   S = S & "Letter"
   S = S & TabStop & "Path"
   S = S & TabStop & "Type"
   S = S & TabStop & "Ready?"
   S = S & TabStop & "Name"
   S = S & TabStop & "System"
   S = S & TabStop & "Space"
   S = S & TabStop & "Space"
   S = S & TabStop & "Space"
   S = S & TabStop & "Number" & NewLine

   ' 分隔行。
   S = S & String(105, "-") & NewLine

   For Each Drive In Drives
      S = S & Drive.DriveLetter
      S = S & TabStop & Drive.Path
      S = S & TabStop & ShowDriveType(Drive)
      S = S & TabStop & Drive.IsReady

      If Drive.IsReady Then
         If DriveTypeNetwork = Drive.DriveType Then
            S = S & TabStop & Drive.ShareName
         Else
            S = S & TabStop & Drive.VolumeName
         End If
         S = S & TabStop & Drive.FileSystem
         S = S & TabStop & Drive.TotalSize
         S = S & TabStop & Drive.FreeSpace
         S = S & TabStop & Drive.AvailableSpace
         S = S & TabStop & Hex(Drive.SerialNumber)
      End If

      S = S & NewLine

   Next

   GenerateDriveInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateFileInformation
' 目的：
' 生成一个字符串，来描述文件的当前状态。
' 示范下面的内容
'  - File.Path
'  - File.Name
'  - File.Type
'  - File.DateCreated
'  - File.DateLastAccessed
'  - File.DateLastModified
'  - File.Size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateFileInformation(File)

   Dim S

   S = NewLine & "Path:" & TabStop & File.Path
   S = S & NewLine & "Name:" & TabStop & File.Name
   S = S & NewLine & "Type:" & TabStop & File.Type
   S = S & NewLine & "Attribs:" & TabStop & ShowFileAttr(File)
   S = S & NewLine & "Created:" & TabStop & File.DateCreated
   S = S & NewLine & "Accessed:" & TabStop & File.DateLastAccessed
   S = S & NewLine & "Modified:" & TabStop & File.DateLastModified
   S = S & NewLine & "Size" & TabStop & File.Size & NewLine

   GenerateFileInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateFolderInformation
' 目的：
' 生成一个字符串，来描述文件夹的当前状态。
' 示范下面的内容
'  - Folder.Path
'  - Folder.Name
'  - Folder.DateCreated
'  - Folder.DateLastAccessed
'  - Folder.DateLastModified
'  - Folder.Size
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateFolderInformation(Folder)

   Dim S

   S = "Path:" & TabStop & Folder.Path
   S = S & NewLine & "Name:" & TabStop & Folder.Name
   S = S & NewLine & "Attribs:" & TabStop & ShowFileAttr(Folder)
   S = S & NewLine & "Created:" & TabStop & Folder.DateCreated
   S = S & NewLine & "Accessed:" & TabStop & Folder.DateLastAccessed
   S = S & NewLine & "Modified:" & TabStop & Folder.DateLastModified
   S = S & NewLine & "Size:" & TabStop & Folder.Size & NewLine

   GenerateFolderInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateAllFolderInformation
' 目的：
' 生成一个字符串，来描述一个文件夹和所有文件及子文件夹的当前状态。
' 示范下面的内容
'  - Folder.Path
'  - Folder.SubFolders
'  - Folders.Count
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateAllFolderInformation(Folder)

   Dim S
   Dim SubFolders
   Dim SubFolder
   Dim Files
   Dim File

   S = "Folder:" & TabStop & Folder.Path & NewLine & NewLine
   Set Files = Folder.Files

   If 1 = Files.Count Then
      S = S & "There is 1 file" & NewLine
   Else
      S = S & "There are " & Files.Count & " files" & NewLine
   End If

   If Files.Count <> 0 Then
      For Each File In Files
         S = S & GenerateFileInformation(File)
      Next
   End If

   Set SubFolders = Folder.SubFolders

   If 1 = SubFolders.Count Then
      S = S & NewLine & "There is 1 sub folder" & NewLine & NewLine
   Else
      S = S & NewLine & "There are " & SubFolders.Count & " sub folders" _
      NewLine & NewLine
   End If

   If SubFolders.Count <> 0 Then
      For Each SubFolder In SubFolders
         S = S & GenerateFolderInformation(SubFolder)
      Next
      S = S & NewLine
      For Each SubFolder In SubFolders
         S = S & GenerateAllFolderInformation(SubFolder)
      Next
   End If

   GenerateAllFolderInformation = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GenerateTestInformation
' 目的：
'    生成一个字符串，来描述 C:\Test 文件夹和所有文件及子文件夹的当前状态。
' 示范下面的内容
'  - FileSystemObject.DriveExists
'  - FileSystemObject.FolderExists
'  - FileSystemObject.GetFolder
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GenerateTestInformation(FSO)

   Dim TestFolder
   Dim S

   If Not FSO.DriveExists(TestDrive) Then Exit Function
   If Not FSO.FolderExists(TestFilePath) Then Exit Function

   Set TestFolder = FSO.GetFolder(TestFilePath)

   GenerateTestInformation = GenerateAllFolderInformation(TestFolder)

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteTestDirectory
' 目的：
'    清理 test 目录。
' 示范下面的内容
'  - FileSystemObject.GetFolder
'  - FileSystemObject.DeleteFile
'  - FileSystemObject.DeleteFolder
'  - Folder.Delete
'  - File.Delete
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub DeleteTestDirectory(FSO)

   Dim TestFolder
   Dim SubFolder
   Dim File

   ' 有两种方法可用来删除文件：

   FSO.DeleteFile(TestFilePath & "\Beatles\OctopusGarden.txt")

   Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")
   File.Delete

   ' 有两种方法可用来删除文件夹：
   FSO.DeleteFolder(TestFilePath & "\Beatles")
   FSO.DeleteFile(TestFilePath & "\ReadMe.txt")
   Set TestFolder = FSO.GetFolder(TestFilePath)
   TestFolder.Delete

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' CreateLyrics
' 目的：
'    在文件夹中创建两个文本文件。
' 示范下面的内容
'  - FileSystemObject.CreateTextFile
'  - TextStream.WriteLine
'  - TextStream.Write
'  - TextStream.WriteBlankLines
'  - TextStream.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub CreateLyrics(Folder)

   Dim TextStream

   Set TextStream = Folder.CreateTextFile("OctopusGarden.txt")

   ' 请注意这不会将一行添加到文件中。
   TextStream.Write("Octopus' Garden ")
   TextStream.WriteLine("(by Ringo Starr)")
   TextStream.WriteBlankLines(1)
   TextStream.WriteLine("I'd like to be under the sea in an octopus' garden in the shade,")
   TextStream.WriteLine("He'd let us in, knows where we've been -- in his octopus' garden in the shade.")
   TextStream.WriteBlankLines(2)

   TextStream.Close

   Set TextStream = Folder.CreateTextFile("BathroomWindow.txt")
   TextStream.WriteLine("She Came In Through The Bathroom Window (by Lennon/McCartney)")
   TextStream.WriteLine("")
   TextStream.WriteLine("She came in through the bathroom window protected by a silver spoon")
   TextStream.WriteLine("But now she sucks her thumb and wanders by the banks of her own lagoon")
   TextStream.WriteBlankLines(2)
   TextStream.Close

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' GetLyrics
' 目的：
'    显示 lyrics 文件的内容。
' 示范下面的内容
'  - FileSystemObject.OpenTextFile
'  - FileSystemObject.GetFile
'  - TextStream.ReadAll
'  - TextStream.Close
'  - File.OpenAsTextStream
'  - TextStream.AtEndOfStream
'  - TextStream.ReadLine
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function GetLyrics(FSO)

   Dim TextStream
   Dim S
   Dim File

   ' 有多种方法可用来打开一个文本文件，和多种方法来从文件读取数据。
   ' 这儿用了两种方法来打开文件和读取文件：

   Set TextStream = FSO.OpenTextFile(TestFilePath & "\Beatles\OctopusGarden.txt", OpenFileForReading)

   S = TextStream.ReadAll & NewLine & NewLine
   TextStream.Close

   Set File = FSO.GetFile(TestFilePath & "\Beatles\BathroomWindow.txt")
   Set TextStream = File.OpenAsTextStream(OpenFileForReading)
   Do    While Not TextStream.AtEndOfStream
      S = S & TextStream.ReadLine & NewLine
   Loop
   TextStream.Close

   GetLyrics = S

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' BuildTestDirectory
' 目的：
'    创建一个目录分层结构来示范 FileSystemObject。
'    以这样的次序来创建分层结构：
'       C:\Test
'       C:\Test\ReadMe.txt
'       C:\Test\Beatles
'       C:\Test\Beatles\OctopusGarden.txt
'       C:\Test\Beatles\BathroomWindow.txt
' 示范下面的内容
'  - FileSystemObject.DriveExists
'  - FileSystemObject.FolderExists
'  - FileSystemObject.CreateFolder
'  - FileSystemObject.CreateTextFile
'  - Folders.Add
'  - Folder.CreateTextFile
'  - TextStream.WriteLine
'  - TextStream.Close
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Function BuildTestDirectory(FSO)

   Dim TestFolder
   Dim SubFolders
   Dim SubFolder
   Dim TextStream

   ' 排除(a)驱动器不存在，
   ' 或(b)要创建的目录已经存在的情况。

   If Not FSO.DriveExists(TestDrive) Then
      BuildTestDirectory = False
      Exit Function
   End If

   If FSO.FolderExists(TestFilePath) Then
      BuildTestDirectory = False
      Exit Function
   End If

   Set TestFolder = FSO.CreateFolder(TestFilePath)

   Set TextStream = FSO.CreateTextFile(TestFilePath & "\ReadMe.txt")
   TextStream.WriteLine("My song lyrics collection")
   TextStream.Close

   Set SubFolders = TestFolder.SubFolders
   Set SubFolder = SubFolders.Add("Beatles")
   CreateLyrics SubFolder
   BuildTestDirectory = True

End Function

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 主程序
' 首先，它创建一个 test 目录，以及一些子文件夹和文件。
' 然后，它转储有关可用磁盘驱动器和 test 目录的某些信息，
' 最后，清除 test 目录及其所有内容。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub Main

   Dim FSO

   ' 设立全局变量。
   TabStop = Chr(9)
   NewLine = Chr(10)

   Set FSO = CreateObject("Scripting.FileSystemObject")

   If Not BuildTestDirectory(FSO) Then
      Print "Test directory already exists or cannot be created.   Cannot continue."
      Exit Sub
   End If

   Print GenerateDriveInformation(FSO) & NewLine & NewLine
   Print GenerateTestInformation(FSO) & NewLine & NewLine
   Print GetLyrics(FSO) & NewLine & NewLine
   DeleteTestDirectory(FSO)

End Sub


脚本运行时参考

本节内容

FileSystemObject 属性
可以与 FileSystemObject 对象模型一起使用的属性列表。
FileSystemObject 方法
可以与 FileSystemObject 对象模型一起使用的方法列表。
FileSystemObject 对象
可以与 FileSystemObject 对象模型一起使用的对象列表。
FileSystemObject 集合
可以与 FileSystemObject 对象模型一起使用的集合列表。

相关章节

FileSystemObject 基础
FileSystemObject 的基本知识指南。


FileSystemObject 属性

本节内容

AtEndOfLine 属性
如果文件指针恰好定位在 TextStream 文件中行尾标记的前面，则返回 True；如果没有，则返回 False。
AtEndOfStream 属性
如果文件指针位于 TextStream 文件的末尾，则返回 True；如果不是，则返回 False。
Attributes 属性
设置或返回文件或文件夹的属性。
AvailableSpace 属性
返回指定的驱动器或网络共享上，可供用户使用的空间大小。
Column 属性
返回 TextStream 文件中当前字符位置的列号。
CompareMode 属性
设置并返回比较模式，用于比较 Dictionary 对象中的字符串关键字。
Count 属性
返回集合或 Dictionary 对象中的项目数。
DateCreated 属性
返回指定的文件或文件夹的创建日期和时间。只读。
DateLastAccessed 属性
返回指定的文件或文件夹上一次被访问的日期和时间。
DateLastModified 属性
返回指定的文件或文件夹上一次被修改的日期和时间。
Drive 属性
返回指定的文件或文件夹所在驱动器的盘符。
DriveLetter 属性
返回本地物理驱动器或网络共享的盘符。
Drives 属性
返回一个 Drives 集合，该集合包含本地计算机上所有可用的 Drive 对象。
DriveType 属性
返回一个值，表明指定的驱动器的类型。
Files 属性
返回一个 Files 集合，该集合包含指定的文件夹中包含的全部 File 对象，包括那些设为隐藏和系统文件属性的对象。
FileSystem 属性
返回指定的驱动器所用的文件系统的类型。
FreeSpace 属性
返回指定的驱动器或网络共享上，可供用户使用的空间大小。
IsReady 属性
如果指定的驱动器准备就绪，则返回 True；如果没有，则返回 False。
IsRootFolder 属性
如果指定的文件夹是根文件夹，则返回 True；如果不是，则返回 False。
Item 属性
对于 Dictionary 对象中指定的关键字，设置或返回与之相对应的项目。对于集合，则根据指定的关键字返回一个项目。
Key 属性
设置 Dictionary 对象中的关键字。
Line 属性
返回 TextStream 文件中的当前行号。
Name 属性
设置或返回指定的文件或文件夹的名称。
ParentFolder 属性
返回指定文件或文件夹的上一级的文件夹对象。
Path 属性
返回指定文件、文件夹或驱动器的路径。
RootFolder 属性
返回一个 Folder 对象，代表指定驱动器的根文件夹。
SerialNumber 属性
返回十进制序列号，用于唯一地标识磁盘卷。
ShareName 属性
返回指定驱动器的网络共享名。
ShortName 属性
返回要求早期 8.3 命名规范的程序使用的短名称。
ShortPath 属性
返回要求早期 8.3 命名规范的程序使用的短路径。
Size 属性
对于文件，返回指定的文件的大小，以字节为单位。对于文件夹，返回文件夹所包含的所有文件和子文件夹的大小，以字节为单位。
SubFolders 属性
返回一个 Folders 集合，包含指定文件夹中的所有文件夹，包括那些设为隐藏和系统文件属性的文件夹。
TotalSize 属性
返回驱动器或网络共享的总空间，以字节为单位。
Type 属性
返回有关文件或文件夹类型的信息。
VolumeName 属性
设置或返回指定驱动器的卷名。

相关章节

脚本运行时参考
构成脚本运行时参考的元素列表。
FileSystemObject 基础
FileSystemObject 的基本知识指南。


AtEndOfLine 属性 (FileSystemObject)

脚本运行时库

AtEndOfLine 属性

如果文件指针正好位于 TextStream 文件中的行尾符之前，则返回true，否则返回 false。只读。

object.AtEndOfLine

object 总是 TextStream 对象的名称。

说明

AtEndOfLine 属性只能应用于打开用来读取的TextStream 文件；否则将产生错误。

下面的代码演示了AtEndOfLine 属性的用法：

[JScript]
function GetALine(filespec)
{
   var fso, a, s, ForReading;
   ForReading = 1, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   a = fso.OpenTextFile(filespec, ForReading, false);
   while (!a.AtEndOfLine)
   {
      s += a.Read(1);
   }
   a.Close( );
   return(s);
}
[VBScript]
Function ReadEntireFile(filespec)
   Const ForReading = 1
   Dim fso, theFile, retstring
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set theFile = fso.OpenTextFile(filespec, ForReading, False)
   Do While theFile.AtEndOfLine <> True
      retstring = theFile.Read(1)
   Loop
   theFile.Close
   ReadEntireFile = retstring
End Function

请参阅

AtEndOfStream 属性

应用于：TextStream 对象


AtEndOfStream 属性 (FileSystemObject)

脚本运行时库

AtEndOfStream 属性

如果文件指针正好位于 TextStream 文件中的结尾，则返回true，否则返回 false。只读。

object.AtEndOfStream

object 总是 TextStream 对象的名称。

说明

AtEndOfStream 属性只能应用于打开用来读取的TextStream 文件；否则将产生错误。

下面的代码演示了AtEndOfStream 属性的用法：

[JScript]
function GetALine(filespec)
{
   var fso, f, s, ForReading;
   ForReading = 1, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile(filespec, ForReading, false);
   while (!f.AtEndOfStream)
      s += f.ReadLine( );
   f.Close( );
   return(s);
}
[VBScript]
Function ReadEntireFile(filespec)
   Const ForReading = 1
   Dim fso, theFile, retstring
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set theFile = fso.OpenTextFile(filespec, ForReading, False)
   Do While theFile.AtEndOfStream <> True
      retstring = theFile.ReadLine
   Loop
   theFile.Close
   ReadEntireFile = retstring
End Function

请参阅

AtEndOfLine 属性

应用于：TextStream 对象


Attributes 属性

设置或返回文件或文件夹的属性。根据不同属性为读/写或只读。

object.Attributes [= newattributes]

参数

object
必选项。应为 File 或 Folder 对象的名称。
newattributes
可选项。如果提供了这个部分，那么 newattributes 将成为指定的 object 的新属性值。

设置

newattributes 参数可以是下列各值或者这些值的任意逻辑组合：

常数 | 值 | 描述
Normal | 0 | 普通文件。不设置属性。
ReadOnly | 1 | 只读文件。属性为读/写。
Hidden | 2 | 隐藏文件。属性为读/写。
System | 4 | 系统文件。属性为读/写。
Volume | 8 | 磁盘驱动器卷标。属性为只读。
Directory | 16 | 文件夹或目录。属性为只读。
Archive | 32 | 文件在上次备份后已经修改。属性为读/写。
Alias | 64 | 链接或者快捷方式。属性为只读。
Compressed | 128 | 压缩文件。属性为只读。

说明

下面的代码通过一个文件说明了 Attributes 属性的用法：

[JScript]
function ToggleArchiveBit(filespec)
{
   var fso, f, r, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec)
   if (f.attributes && 32)
   {
      f.attributes = f.attributes - 32;
      s = "Archive bit is cleared.";
   }
   else
   {
      f.attributes = f.attributes + 32;
      s =   "Archive bit is set.";
   }
   return(s);
}
[VBScript]
Function ToggleArchiveBit(filespec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   If f.attributes and 32 Then
      f.attributes = f.attributes - 32
      ToggleArchiveBit = "Archive bit is cleared."
   Else
      f.attributes = f.attributes + 32
      ToggleArchiveBit = "Archive bit is set."
   End If
End Function

请参阅

DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


AvailableSpace 属性

返回在所指定的驱动器或网络共享上可用的空间的大小。

object.AvailableSpace

其中 object 总是一个 Drive 对象。

说明

在典型情况下，由 AvailableSpace 属性所返回的值与 FreeSpace 属性所返回的值是一样的。但是对于支持 quotas 的两个计算机系统之间返回值可能会有所不同。

下面这段代码说明了 AvailableSpace 属性的用法：

[JScript]
function ShowAvailableSpace(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath.toUpperCase() + " - ";
   s += d.VolumeName + "<br>";
   s += "Available Space：" + d.AvailableSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowAvailableSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Available Space：" & FormatNumber(d.AvailableSpace/1024, 0)
   s = s & " Kbytes"
   ShowAvailableSpace = s
End Function

请参阅

DriveLetter 属性 | DriveType 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性 | VolumeName 属性

应用于：Drive 对象


Column 属性 (FileSystemObject)

脚本运行时库

Column 属性

为只读属性，返回当前字符在 TextStream 文件中的列号。

object.Column

object 总是 TextStream 对象的名称。

说明

如果在已换行符之后，但在其他任何字符之前，Column 将等于 1。

下面的示例演示了Column 属性的用法：

[JScript]
function GetColumn()
{
   var fso, f, m;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.Write("Hello World!");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   m = f.ReadLine();
   return(f.Column);
}
[VBScript]
Function GetColumn
   Const ForReading = 1, ForWriting = 2
   Dim fso, f, m
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   f.Close
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   m =   f.ReadLine
   GetColumn = f.Column
End Function

请参阅

Line 属性

应用于：TextStream 对象


CompareMode 属性

设置或者返回在 Dictionary 对象中进行字符串关键字比较时所使用的比较模式。

object.CompareMode[ = compare]

参数

object
必选项。总是一个 Dictionary 对象的名称。
compare
可选项。如果提供了此项，compare 就是一个代表比较模式的值。可以使用的值是 0 (二进制)、1 (文本), 2 (数据库)。大于 2 的值可以用来表示使用特殊的区域设置 ID (LCID) 而进行的比较。

说明

如果试图改变一个已经包含有数据的 Dictionary 对象的比较模式，那么将导致一个错误。

下面这个例子说明了 CompareMode 属性的用法：

[JScript]function TestCompareMode(key)
{
   // 创建一些变量。
   var a, d;
   var BinaryCompare = 0, TextCompare = 1;
   d = new ActiveXObject("Scripting.Dictionary");
   // 将比较模式设置为文本模式。
   d.CompareMode = TextCompare;
   // 添加一些关键字和项目。
   d.Add("a", "Athens");
   d.Add("b", "Belgrade");
   d.Add("c", "Cairo");
   return(d.Item(key));
}
[VBScript]
Dim d
Set d = CreateObject("Scripting.Dictionary")

d.CompareMode = vbTextCompare
d.Add "a", "Athens"   ' 添加一些关键字和项目。
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
d.Add "B", "Baltimore"   ' 无法在该行添加方法。
                         ' 因为 Dictionary 中已存在字母 b。

请参阅

Key 属性

应用于：Dictionary 对象


DateLastAccessed 属性

返回最后访问指定文件或文件夹的日期和时间。只读。

object.DateLastAccessed

object 应为 File 或 Folder 对象。

说明

下面的代码通过一个文件说明了 DateLastAccessed 属性的用法：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = filespec.toUpperCase() + "<br>";
   s += "Created：" + f.DateCreated + "<br>";
   s += "Last Accessed：" + f.DateLastAccessed + "<br>";
   s += "Last Modified：" + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(filespec) & "<BR>"
   s = s & "Created：" & f.DateCreated & "<BR>"
   s = s & "Last Accessed：" & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified：" & f.DateLastModified
   ShowFileAccessInfo = s
End Function
注意 这个方法的操作依赖于底层的操作系统。如果操作系统不支持提供时间信息，那么将不会返回任何信息。

请参阅

Attributes 属性 | DateCreated 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


DateLastModified 属性

返回最后修改指定文件或文件夹的日期和时间。只读。

object.DateLastModified

object 应为 File 或 Folder 对象。

说明

下面的代码通过一个文件说明了 DateLastModified 属性的用法：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = filespec.toUpperCase() + "<br>";
   s += "Created：" + f.DateCreated + "<br>";
   s += "Last Accessed：" + f.DateLastAccessed + "<br>";
   s += "Last Modified：" + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(filespec) & "<BR>"
   s = s & "Created：" & f.DateCreated & "<BR>"
   s = s & "Last Accessed：" & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified：" & f.DateLastModified
   ShowFileAccessInfo = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


Drive 属性

返回指定文件或文件夹所在驱动器的驱动器号。只读。

object.Drive

object 应为 File 或 Folder 对象。

说明

下面的代码说明了 Drive 属性的用法：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Name + " on Drive " + f.Drive + "<br>";
   s += "Created：" + f.DateCreated + "<br>";
   s += "Last Accessed：" + f.DateLastAccessed + "<br>";
   s += "Last Modified：" + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = f.Name & " on Drive " & UCase(f.Drive) & "<BR>"
   s = s & "Created：" & f.DateCreated & "<BR>"
   s = s & "Last Accessed：" & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified：" & f.DateLastModified
   ShowFileAccessInfo = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


DriveLetter 属性

返回一个物理上的本地驱动器或者网络共享的驱动器号。只读属性。

object.DriveLetter

其中 object 总是一个 Drive 对象。

说明

如果所指定的驱动器没有与一个驱动器号关联起来，例如，一个没有映射到驱动器号的网络共享，那么 DriveLetter 属性将返回一个长度为 0 的字符串 ("")。

下面这段代码说明了 DriveLetter 属性的用法：

[JScript]
function ShowDriveLetter(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + d.DriveLetter.toUpperCase( ) + "：- ";
   s += d.VolumeName + "<br>";
   s += "Available Space：" + d.AvailableSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowDriveLetter(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & d.DriveLetter & "：- "
   s = s & d.VolumeName & "<BR>"
   s = s & "Free Space：" & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowDriveLetter = s
End Function

请参阅

AvailableSpace 属性 | DriveType 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性 | VolumeName 属性

应用于：Drive 对象


Drives 属性

返回一个 Drives 集合，包含了本地机器上所有可用的 Drive 对象。

object.Drives

object 应为 FileSystemObject 。

说明

可移动媒体的驱动器不需要插入媒体就可以出现在 Drives 集合中。

[JScript]

可以通过 Enumerator 对象和 for 语句来逐个引用 Drives 集合中的成员：

[JScript]
function ShowDriveList()
{
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
      s +=   n + "<br>";
   }
   return(s);
}

[VBScript]

如下列代码所示，可以使用 For Each...Next 结构遍历 Drives 集合的成员：

[VBScript]
Function ShowDriveList
   Dim fso, d, dc, s, n
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set dc = fso.Drives
   For Each d in dc
      n = ""
      s = s & d.DriveLetter & " - "
      If d.DriveType = 3 Then
         n = d.ShareName
      ElseIf d.IsReady Then
         n = d.VolumeName
      End If
      s = s & n & "<BR>"
   Next
   ShowDriveList = s
End Function

请参阅

Drives 集合 | Files 属性 | SubFolders 属性

应用于：FileSystemObject 对象


DriveType 属性

返回一个值，表示所指定驱动器的类型。

object.DriveType

其中 object 总是一个 Drive 对象。

说明

下面这段代码说明了 DriveType 属性的用法：

[JScript]
function ShowDriveType(drvpath)
{
   var fso, d, s, t;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(drvpath);
   switch (d.DriveType)
   {
      case 0：t = "Unknown"; break;
      case 1：t = "Removable"; break;
      case 2：t = "Fixed"; break;
      case 3：t = "Network"; break;
      case 4：t = "CD-ROM"; break;
      case 5：t = "RAM Disk"; break;
   }
   s = "Drive " + d.DriveLetter + "：- " + t;
   return(s);
}
[VBScript]
Function ShowDriveType(drvpath)
   Dim fso, d, t
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvpath)
   Select Case d.DriveType
      Case 0：t = "Unknown"
      Case 1：t = "Removable"
      Case 2：t = "Fixed"
      Case 3：t = "Network"
      Case 4：t = "CD-ROM"
      Case 5：t = "RAM Disk"
   End Select
   ShowDriveType = "Drive " & d.DriveLetter & "：- " & t
End Function

请参阅

AvailableSpace 属性 | DriveLetter 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性 | VolumeName 属性

应用于：Drive 对象


FileSystem 属性

返回指定驱动器所使用的文件系统的类型。

object.FileSystem

其中 object 总是一个 Drive 对象。

说明

可能的返回类型包括 FAT、NTFS、和 CDFS。

下面这段代码说明了 FileSystem 属性的用法：

[JScript]
function ShowFileSystemType(drvPath)
{
   var fso,d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(drvPath);
   s = d.FileSystem;
   return(s);
}
[VBScript]
Function ShowFileSystemType(drvspec)
   Dim fso,d
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvspec)
   ShowFileSystemType = d.FileSystem
End Function

请参阅

AvailableSpace 属性 | DriveLetter 属性 | DriveType 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性 | VolumeName 属性

应用于：Drive 对象


FreeSpace 属性

向用户返回指定驱动器或网络共享上的可用空间的大小。只读。

object.FreeSpace

object 应为 Drive 对象。

说明

典型情况中，由 FreeSpace 属性返回的值和由 AvailableSpace 属性返回的值是相同的。对于支持 quotas 的计算机系统来说两者有可能不同。

下面的代码说明了 FreeSpace 属性的用法：

[JScript]
function ShowFreeSpace(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath.toUpperCase( ) + " - ";
   s += d.VolumeName + "<br>";
   s += "Free Space: " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function

请参阅

AvailableSpace 属性 | DriveLetter 属性 | DriveType 属性 | FileSystem 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性 | VolumeName 属性

应用于：Drive 对象


IsReady 属性

如果指定驱动器已就绪则返回 True ；否则 False。

object.IsReady

object 应为 Drive 对象。

说明

对于可移动媒体的驱动器和 CD-ROM 驱动器来说，IsReady 只有在插入了适当的媒体并已准备好访问时才返回 True 。

下面的代码说明了 IsReady 属性的用法：

[JScript]
function ShowDriveInfo(drvpath)
{
   var fso, d, s, t;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   d = fso.GetDrive(drvpath)
   switch (d.DriveType)
   {
      case 0：t = "Unknown"; break;
      case 1：t = "Removable"; break;
      case 2：t = "Fixed"; break;
      case 3：t = "Network"; break;
      case 4：t = "CD-ROM"; break;
      case 5：t = "RAM Disk"; break;
   }
   s = "Drive " + d.DriveLetter + "：- " + t;
   if (d.IsReady)
      s += "<br>" + "Drive is Ready.";
   else
      s += "<br>" + "Drive is not Ready.";
   return(s);
}
[VBScript]
Function ShowDriveInfo(drvpath)
   Dim fso, d, s, t
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(drvpath)
   Select Case d.DriveType
      Case 0：t = "Unknown"
      Case 1：t = "Removable"
      Case 2：t = "Fixed"
      Case 3：t = "Network"
      Case 4：t = "CD-ROM"
      Case 5：t = "RAM Disk"
   End Select
   s = "Drive " & d.DriveLetter & "：- " & t
   If d.IsReady Then
      s = s & "<BR>" & "Drive is Ready."
   Else
      s = s & "<BR>" & "Drive is not Ready."
   End If
   ShowDriveInfo = s
End Function

请参阅

AvailableSpace 属性 | DriveLetter 属性 | DriveType 属性 | FileSystem 属性 | FreeSpace 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性 | VolumeName 属性

应用于：Drive 对象


IsRootFolder 属性

如果指定的文件夹是根文件夹则返回 True ；否则返回 False 。

object.IsRootFolder

object 应为 Folder 对象。

说明

下面的代码说明了 IsRootFolder 属性的用法：

[JScript]
function DisplayLevelDepth(pathspec)
{
   var fso, f, n, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(pathspec);
   n = 0;
   if (f.IsRootFolder)
      s = "The specified folder is the root folder."
   else
   {
      do
      {
         f = f.ParentFolder;
         n++;
      }
      while (!f.IsRootFolder)
      s = "The specified folder is nested " + n + " levels deep."
   }
   return(s);
}
[VBScript]
Function DisplayLevelDepth(pathspec)
   Dim fso, f, n
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(pathspec)
   If f.IsRootFolder Then
      DisplayLevelDepth = "The specified folder is the root folder."
   Else
      Do Until f.IsRootFolder
         Set f = f.ParentFolder
         n = n + 1
      Loop
      DisplayLevelDepth = "The specified folder is nested " & n & " levels deep."
   End If
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：Folder 对象


Line 属性

只读属性，返回 TextStream 文件中当前的行号。

object.Line

object 总是 TextStream 对象的名称。

说明

在文件初始打开并写入任何字符之前，Line 等于 1。

下面的示例演示了Line 属性的用法：

[JScript]
function GetLine()
{
   var fso, f, r
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   f = fso.OpenTextFile("c:\\textfile.txt", ForWriting, true)
   f.WriteLine("Hello world!");
   f.WriteLine("JScript is fun");
   f.Close();
   f = fso.OpenTextFile("c:\\textfile.txt", ForReading);
   r =   f.ReadAll();
   return(f.Line);
}
[VBScript]
Function GetLine
   Const ForReading = 1, ForWriting = 2
   Dim fso, f, ra
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!" & vbCrLf & "VB Script is fun!" & vbCrLf
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   ra =   f.ReadAll
   GetLine = f.Line
End Function

请参阅

Column 属性

应用于：TextStream 对象


Name 属性

设置或返回指定文件或文件夹的名称。读/写。

object.Name [= newname]

参数

object
必选项。始终为 File 或 Folder 对象的名称。
newname
可选项。如果提供了这个部分， newname 将成为指定的 object 的新名称。

说明

下面的代码说明了 Name 属性的用法：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Name + " on Drive " + f.Drive + "<br>";
   s += "Created：" + f.DateCreated + "<br>";
   s += "Last Accessed：" + f.DateLastAccessed + "<br>";
   s += "Last Modified：" + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = f.Name & " on Drive " & UCase(f.Drive) & "<BR>"
   s = s & "Created：" & f.DateCreated & "<BR>"
   s = s & "Last Accessed：" & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified：" & f.DateLastModified
   ShowFileAccessInfo = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


ParentFolder 属性

返回指定文件或文件夹的父文件夹对象。只读。

object.ParentFolder

object 应为 File 或 Folder 对象。

说明

下面的代码通过一个文件说明了 ParentFolder 属性的用法：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Name + " in " + f.ParentFolder + "<br>";
   s += "Created：" + f.DateCreated + "<br>";
   s += "Last Accessed：" + f.DateLastAccessed + "<br>";
   s += "Last Modified：" + f.DateLastModified;
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(f.Name) & " in " & UCase(f.ParentFolder) & "<BR>"
   s = s & "Created：" & f.DateCreated & "<BR>"
   s = s & "Last Accessed：" & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified：" & f.DateLastModified
   ShowFileAccessInfo = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


Path 属性 (FileSystemObject)

脚本运行时库

Path 属性

返回指定文件、文件夹或驱动器的路径。

object.Path

object 总是为 File、Folder 或 Drive 对象。

说明

驱动器字母后不包括根驱动器。例如， C 驱动器的路径是 C:，而不是 C:\。

下面的代码通过 File 对象说明了 Path 属性的用法：

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, d, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Path.toUpperCase() + "<br>";
   s += "Created：" + f.DateCreated + "<br>";
   s += "Last Accessed：" + f.DateLastAccessed + "<br>";
   s += "Last Modified：" + f.DateLastModified
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, d, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = UCase(f.Path) & "<BR>"
   s = s & "Created：" & f.DateCreated & "<BR>"
   s = s & "Last Accessed：" & f.DateLastAccessed & "<BR>"
   s = s & "Last Modified：" & f.DateLastModified
   ShowFileAccessInfo = s
End Function

请参阅

Attributes 属性 | AvailableSpace 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | DriveLetter 属性 | DriveType 属性 | Files 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | TotalSize 属性 | Type 属性 | VolumeName 属性

应用于：Drive 对象 | File 对象 | Folder 对象


RootFolder 属性

返回一个 Folder 对象，表示指定驱动器的根文件夹。只读。

object.RootFolder

object 总是为 Drive 对象。

说明

可以通过返回的 Folder 对象来访问驱动器上的所有文件和文件夹。

下面的例子说明了 RootFolder 属性的用法：

[JScript]
function GetRootFolder(drv)
{
   var fso,d;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.DriveExists(drv))
      {
         d = fso.GetDrive(drv);
         return(d.RootFolder);
      }
   else
      return(false);
}
[VBScript]
Function ShowRootFolder(drvspec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetDrive(drvspec)
   ShowRootFolder = f.RootFolder
End Function

请参阅

AvailableSpace 属性 | DriveLetter 属性 | DriveType 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性 | VolumeName 属性

应用于：Drive 对象


SerialNumber 属性 (FileSystemObject)

脚本运行时库

SerialNumber 属性

返回用于唯一标识磁盘卷的十进制序列号。

object.SerialNumber

object 始终是 Drive 对象。

说明

可使用 SerialNumber 属性确保在用于安放可移动媒体的驱动器中插入了正确的磁盘。

以下代码说明了 SerialNumber 属性的用法：

[JScript]
function ShowDriveInfo(drvpath){
  var fso, d, s, t;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)));
  switch (d.DriveType)
  {
    case 0: t = "Unknown"; break;
    case 1: t = "Removable"; break;
    case 2: t = "Fixed"; break;
    case 3: t = "Network"; break;
    case 4: t = "CD-ROM"; break;
    case 5: t = "RAM Disk"; break;
  }
  s = "Drive " + d.DriveLetter + ": - " + t;
  s += "<br>" + "SN: " + d.SerialNumber;
  return(s);
}
[VBScript]
Function ShowDriveInfo(drvpath)
   Dim fso, d, s, t
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
   Select Case d.DriveType
      Case 0: t = "Unknown"
      Case 1: t = "Removable"
      Case 2: t = "Fixed"
      Case 3: t = "Network"
      Case 4: t = "CD-ROM"
      Case 5: t = "RAM Disk"
   End Select
   s = "Drive " & d.DriveLetter & ": - " & t
   s = s & "<BR>" & "SN: " & d.SerialNumber
   ShowDriveInfo = s
End Function


ShareName 属性

返回指定驱动器的网络共享名。

object.ShareName

object 总是为 Drive 对象。

说明

如果 object 不是网络驱动器，那么 ShareName 属性将返回长度为零的字符串 ("") 。

下面的代码说明了 ShareName 属性的用法：

[JScript]
function ShowDriveInfo(drvpath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)));
   s = "Drive " + d.DriveLetter + ": - " + d.ShareName;
   return(s);
}
[VBScript]
Function ShowDriveInfo(drvpath)
   Dim fso, d
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
   ShowDriveInfo = "Drive " & d.DriveLetter & ": - " & d.ShareName
End Function

请参阅

AvailableSpace 属性 | DriveLetter 属性 | DriveType 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | TotalSize 属性 | VolumeName 属性

应用于：Drive 对象


ShortName 属性

返回短名称，这些短名称由需要以前的 8.3 命名规范的程序使用。

object.ShortName

object 应为 File 或 Folder 对象。

说明

下面的代码通过一个 File 对象说明了 ShortName 属性的用法：

[JScript]
function ShowShortName(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = "The short name for " + "" + f.Name;
   s += "" + "<br>";
   s += "is：" + "" + f.ShortName + "";
   return(s);
}
[VBScript]
Function ShowShortName(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = "The short name for "   & UCase(f.Name) & "<BR>"
   s = s & "is：" & f.ShortName
   ShowShortName = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


ShortPath 属性

返回短路径名，这些短文件名由需要以前的 8.3 文件命名规范的程序使用。

object.ShortPath

object 应为 File 或 Folder 对象。

说明

下面的代码通过一个 File 对象说明了 ShortName 属性的用法：

[JScript]
function ShowShortName(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = "The short name for " + "" + f.Name;
   s += "" + "<br>";
   s += "is：" + "" + f.ShortName + "";
   return(s);
}
[VBScript]
Function ShowShortName(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = "The short name for "   & UCase(f.Name) & "<BR>"
   s = s & "is：" & f.ShortName
   ShowShortName = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


Size 属性

对于文件，以字节为单位返回指定文件的大小。对于文件夹，以字节为单位返回文件夹中包含的所有文件和子文件夹的大小。

object.Size

object 应为 File 或 Folder 对象。

说明

下面的代码通过一个 Folder 对象说明了 Size 属性的用法：

[JScript]
function ShowFolderSize(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(filespec);
   s = f.Name + " uses " + f.size + " bytes.";
   return(s);
}
[VBScript]
Function ShowFolderSize(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(filespec)
   s = UCase(f.Name) & " uses " & f.size & " bytes."
   ShowFolderSize = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


SubFolders 属性

返回一个 Folders 集合，由指定文件夹中包含的所有文件夹组成，包括设置了隐藏和系统文件属性的文件夹。

object.SubFolders

object 应为 Folder 对象。

说明

下面的代码说明了 SubFolders 属性的用法：

[JScript]
function ShowFolderList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.SubFolders);
   s = "";
   for (;!fc.atEnd(); fc.moveNext())
      {
         s += fc.item();
         s += "<br>";
      }
      return(s);
}
[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, s, sf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set sf = f.SubFolders
   For Each f1 in sf
      s = s & f1.name
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | Type 属性

应用于：Folder 对象


TotalSize 属性

以字节为单位返回驱动器或网络共享的所有空间大小。

object.TotalSize

object 总是为 Drive 对象。

说明

下面的代码说明了 TotalSize 属性的用法：

[JScript]
function SpaceReport(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - ";
   s += d.VolumeName + "<br>";
   s += "Total Space："+ d.TotalSize/1024 + " Kbytes <br>";
   s += "Free Space：  " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowSpaceInfo(drvpath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
   s = "Drive " & d.DriveLetter & ":"
   s = s & vbCrLf
   s = s & "Total Size：" & FormatNumber(d.TotalSize/1024, 0) & " Kbytes"
   s = s & vbCrLf
   s = s & "Available：" & FormatNumber(d.AvailableSpace/1024, 0) & " Kbytes"
   ShowSpaceInfo = s
End Function

请参阅

AvailableSpace 属性 | DriveLetter 属性 | DriveType 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | VolumeName 属性

应用于：Drive 对象


Type 属性

返回关于文件或文件夹类型的信息。例如，对于以 .TXT 结尾的文件将返回“文本文档”。

object.Type

object 应为 File 或 Folder 对象。

说明

下面的代码说明了利用 Type 属性返回文件夹属性的方法。在这个例子中，可以尝试一下向过程提供回收站或其他特殊文件夹的路径。

[JScript]
function ShowFileType(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.FolderExists(filespec))
      f = fso.GetFolder(filespec);
   else if (fso.FileExists(filespec))
      f = fso.GetFile(filespec);
   else
      s = "File or Folder does not exist.";
   s = f.Name + " is a " + f.Type;
   return(s);
}
[VBScript]
Function ShowFolderType(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(filespec)
   s = UCase(f.Name) & " is a " & f.Type
   ShowFolderType = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性

应用于：File 对象 | Folder 对象


VolumeName 属性

设置或返回指定驱动器的卷名。读/写。

object.VolumeName [= newname]

参数

object
必选项。总是为 Drive 对象的名称。
newname
可选项。如果提供了这个部分,那么 newname 就将成为指定的 object 的新名称。

说明

下面的代码说明了 VolumeName 属性的用法：

[JScript]
function SpaceReport(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - ";
   s += d.VolumeName + "<br>";
   s += "Total Space："+ d.TotalSize/1024 + " Kbytes <br>";
   s += "Free Space：  " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowVolumeInfo(drvpath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)))
   s = "Drive " & d.DriveLetter & "：- " & d.VolumeName
   ShowVolumeInfo = s
End Function

请参阅

AvailableSpace 属性 | DriveLetter 属性 | DriveType 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性

应用于：Drive 对象


FileSystemObject 方法

本节内容

Add 方法（Dictionary）
向 Dictionary 对象中添加一个关键字项目对。
Add 方法（Folders）
将新文件夹添加到 Folders 集合。
BuildPath 方法
将名称追加到现有路径。
Close 方法
关闭一个打开的文本流文件。
Copy 方法
将指定的文件或文件夹从一个位置复制到另一个位置。
CopyFile 方法
将一个或多个文件从一个位置复制到另一个位置。
CopyFolder 方法
递归地将文件夹从一个位置复制到另一个位置。
CreateFolder 方法
创建文件夹。
CreateTextFile 方法
创建指定的文件名，并返回可用于读取该文件或写入到该文件的 TextStream 对象。
Delete 方法
删除指定的文件或文件夹。
DeleteFile 方法
删除指定的文件。
DeleteFolder 方法
删除指定的文件夹及其内容。
DrivesExists 方法
如果指定的驱动器存在，则返回 True；如果不存在，则返回 False。
Exists 方法
如果 Dictionary 对象中存在指定的关键字，则返回 True；如果不存在，则返回 False。
FileExists 方法
如果指定的文件存在，则返回 True；如果指定的对象不存在，则返回 False。
FolderExists 方法
如果指定的文件夹存在，则返回 True；如果不存在，则返回 False。
GetAbsolutePathName 方法
由给定的路径规格，返回完整而明确的路径。
GetBaseName 方法
返回一个字符串，包含路径中最后一个组件的基本名称，但不包含扩展名。
GetDrive 方法
返回一个 Drive 对象，该对象与指定路径中的驱动器相对应。
GetDriveName 方法
返回一个字符串，包含与指定路径相对应的驱动器的名称。
GetExtensionName 方法
返回一个字符串，包含路径中最后一个组件的扩展名。
GetFile 方法
返回一个 File 对象，该对象与指定路径中的文件相对应。
GetFileName 方法
返回指定路径中的最后一个组件，该路径不是驱动器规格的组成部分。
GetFileVersion 方法
返回指定文件的版本号。
GetFolder 方法
返回一个 Folder 对象，该对象与指定路径中的文件夹相对应。
GetParentFolderName 方法
返回一个字符串，包含指定路径中最后一个组件的父文件夹的名称。
GetSpecialFolder 方法
返回指定的特殊文件夹对象。
GetTempName 方法
返回随机生成的临时文件或文件夹名称，这在执行需要临时文件或文件夹的操作中尤为有用。
Items 方法
返回一个数组，包含 Dictionary 对象中的所有项目。
Keys 方法
返回一个数组，包含 Dictionary 对象中的所有现存关键字。
Move 方法
将指定文件或文件夹从一个位置移到另一个位置。
MoveFile 方法
将一个或多个文件从一个位置移到另一个位置。
MoveFolder 方法
将一个或多个文件夹从一个位置移到另一个位置。
OpenAsTextStream 方法
打开指定的文件，并返回可用于读取、写入或追加到该文件的 TextStream 对象。
OpenTextFile 方法
打开指定的文件，并返回可用于读取、写入或追加到该文件的 TextStream 对象。
Read 方法
从 TextStream 文件读取指定数量的字符，并返回所生成的字符串。
ReadAll 方法
读取整个 TextStream 文件，并返回所生成的字符串。
ReadLine 方法
从 TextStream 文件读取一整行（截止到但不包括换行符），并返回生成的字符串。
Remove 方法
从 Dictionary 对象中移除一个关键字、项目对。
RemoveAll 方法
从 Dictionary 对象中移除所有关键字、项目对。
Skip 方法
读取 TextStream 文件时，跳过指定数量的字符。
SkipLine
读取 TextStream 文件时跳过下一行。
Write 方法
将指定的字符串写入 TextStream 文件。
WriteBlankLines 方法
将指定数量的换行符写入 TextStream 文件。
WriteLine 方法
将指定的字符串和换行符写入 TextStream 文件。

相关章节

脚本运行时参考
构成脚本运行时参考的元素列表。
FileSystemObject 基础
FileSystemObject 的基本知识指南。


Add 方法 (Folders)

向 Folders 集合中添加新的文件夹。

object.Add (folderName)

参数

object
必选项。应为 Folders 集合的名称。
folderName
必选项。要添加的新 Folder 的名称。

说明

下面的例子说明了使用 Add 方法创建新文件夹的方法。

[JScript]
function AddNewFolder(path,folderName)
{
   var fso, f, fc, nf;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(path);
   fc = f.SubFolders;
   if (folderName != "" )
      nf = fc.Add(folderName);
   else
      nf = fc.Add("New Folder");
}
[VBScript]
Sub AddNewFolder(path, folderName)
   Dim fso, f, fc, nf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(path)
   Set fc = f.SubFolders
   If folderName <> "" Then
      Set nf = fc.Add(folderName)
   Else
      Set nf = fc.Add("New Folder")
   End If
End Sub

如果 folderName 已经存在了，则会出错。

请参阅

Add 方法 (Dictionary)
应用于：Folders 集合


BuildPath 方法

在已存在路径后追加名称。

object.BuildPath(path, name)

参数

object
必选项。应为 FileSystemObject 的名称。
path
必选项。将被追加 name 的并存在的路径。路径可以是绝对的或相对的，同时不需要指定已有文件夹。
name
必选项。被追加到已存在的 path 后的名称。

说明

如果需要，BuildPath 方法会在已有路径和名称之间另外再插入一个路径分隔符。

下面的例子说明了 BuildPath 方法的用法。

[JScript]
function GetBuildPath(path)
{
   var fso, newpath;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   newpath = fso.BuildPath(path, "New   Folder");
   return(newpath);
}
[VBScript]
Function GetBuildPath(path)
   Dim fso, newpath
   Set fso = CreateObject("Scripting.FileSystemObject")
   newpath = fso.BuildPath(path, "Sub Folder")
   GetBuildPath = newpath
End Function

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFileName 方法 | GetParentFolderName 方法 | GetTempName 方法
应用于：FileSystemObject 对象


Close 方法 (FileSystemObject)

脚本运行时库

Close 方法

关闭打开的 TextStream 文件。

object.Close( );

object 通常为 TextStream 对象的名字。

说明

下面的例子说明了 Close 方法的用法。

[JScript]
var fso;
fso = new ActiveXObject("Scripting.FileSystemObject");
a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();
[VBScript]
Sub CreateAFile
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
   MyFile.WriteLine("This is a test.")
   MyFile.Close
End Sub


Copy 方法

将指定文件或文件夹从一个位置复制到另一位置。

object.Copy( destination[, overwrite] );

参数

object
必选项。应为 File 或 Folder 对象的名称。
destination
必选项。复制文件或文件夹的目的位置。不允许通配字符。
overwrite
可选项。Boolean 值，如果要覆盖已有文件或文件夹，则为 True （默认）；否则，则为 False。

说明

Copy 方法对单个 File 或 Folder 所产生的结果和使用 FileSystemObject.CopyFile 或 FileSystemObject.CopyFolder 所执行的操作结果一样，其中，后者把由 object 所引用的文件或文件夹作为参数传递。但是请注意，后两种替换方法能够复制多个文件或文件夹。

示例

下面的例子说明了 Copy 方法的用法。

[JScript]
var fso, f;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.CreateTextFile("c:\\testfile.txt", true);
f.WriteLine("This is a test.");
f.Close();
f = fso.GetFile("c:\\testfile.txt");
f.Copy("c:\\windows\\desktop\\test2.txt");
[VBScript]
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close
Set MyFile = fso.GetFile("c:\testfile.txt")
MyFile.Copy ("c:\windows\desktop\test2.txt")

请参阅

CopyFile 方法 | CopyFolder 方法 | Delete 方法 | Move 方法 | OpenAsTextStream 方法
应用于：File 对象 | Folder 对象


CopyFile 方法

从一个位置向另一个位置复制一个或多个文件。

object.CopyFile ( source, destination[, overwrite] )

参数

object
必选项。object 应为 FileSystemObject的名称。
source
必选项。指定文件字符串，可以包含通配字符来复制一个或多个文件。
destination
必选项。目的字符串，文件将从 source 复制到这里。不允许通配字符。
overwrite
可选项。Boolean 值，指明是否覆盖已有文件。如果为 true ，则文件将被覆盖；如果为 false ，则文件不会被覆盖。默认的是 true。注意，如果 destination 设置了只读属性，那么无论 overwrite 的值是什么， CopyFile 都会失败。

说明

通配字符只能用在 source 参数中最后的路径成分中。举例来说，可以使用：

[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFile ("c:\\mydocuments\\letters\\*.doc", "c:\\tempfolder\\")
[VBScript]
FileSystemObject.CopyFile "c:\mydocuments\letters\*.doc", "c:\tempfolder\"

但不能使用：

[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFile ("c:\\mydocuments\\*\\R1???97.xls", "c:\\tempfolder")
[VBScript]
FileSystemObject.CopyFile "c:\mydocuments\*\R1???97.xls", "c:\tempfolder"

如果 source 包含了通配字符或者 destination 以路径分隔符 (\) 结束，那么将假定 destination 是一个已有的文件夹，满足匹配的文件将复制到这个文件夹中。否则，将假定 destination 是要创建的文件名。无论哪种情况，如果复制的是单个文件，将会有三种可能。

  • 如果 destination 不存在，那么 source 将被复制。这是通常情况。
  • 如果 destination 是已有文件，当 overwrite 为 false 时将会产生一个错误。否则将会试图用 source 覆盖已有文件。
  • 如果 destination 是目录，将会出错。

如果使用通配字符的 source 不能匹配任何文件，将会出错。CopyFile 方法遇到第一个错误时终止。出错后不会试图回滚或撤消出错前所做的修改。

请参阅

Copy 方法 | CopyFolder 方法 | CreateTextFile 方法 | DeleteFile 方法 | MoveFile 方法
应用于：FileSystemObject 对象


CopyFolder 方法

将文件夹连同子文件夹从一个位置复制到另一个位置。

object.CopyFolder ( source, destination[, overwrite] );

参数

object
必选项。应为 FileSystemObject 的名称。
source
必选项。指定文件夹字符串，可以包含通配字符来复制一个或多个文件夹，
destination
必选项。目的位置字符串， 文件夹和子文件夹将从 source 复制到这里。不允许通配字符。
overwrite
可选项。Boolean 值，指明是否覆盖已有文件夹。如果为 true ，则文件将被覆盖；如果为 false ，则文件不会被覆盖。默认的是 true。

说明

通配字符只能用在 source 参数中最后的路径成分中。举例来说，可以使用：

[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder ("c:\\mydocuments\\letters\\*", "c:\\tempfolder\\")
[VBScript]
FileSystemObject.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\"

但不能使用：

[JScript]
fso = new ActiveXObject("Scripting.FileSystemObject");
fso.CopyFolder ("c:\\mydocuments\\*\\*", "c:\\tempfolder\\")
[VBScript]
FileSystemObject.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"

如果 source 包含了通配字符或者 destination 以路径分隔符 (\) 结束，那么将假定 destination 是一个已有的文件夹，满足匹配的文件夹和子文件夹将复制到这个文件夹中。否则，将假定 destination 是要创建的文件夹名。无论哪种情况，如果复制的是单个文件夹，将会有四种可能。

  • 如果 destination 不存在，将会复制 source 文件夹及其所有子文件夹。这是通常情况。
  • 如果 destination 是已有的文件夹，将产生一个错误。
  • 如果 destination 是一个目录，那么将试图复制文件夹及其所有内容。如果 source 中包含的一个文件在 destination 已经有了，那么当 overwrite 为 false 时将会出错。否则会试图用该文件覆盖已有文件。
  • 如果 destination 是一个只读目录，同时 overwrite 为 false ，那么在试图将已有的只读文件复制到目录中时将会出错。

如果使用了通配字符的 source 不能匹配任何文件夹，那么将产生错误。

CopyFolder 方法在遇到第一个错误时终止。出错后不试图回滚出错前所做的修改。

请参阅

CopyFile 方法 | Copy 方法 | CreateFolder 方法 | DeleteFolder 方法 | MoveFolder 方法
应用于：FileSystemObject 对象


CreateFolder 方法

创建文件夹。

object.CreateFolder(foldername)

参数

object
必选项。应为 FileSystemObject 的名称。
foldername
必选项。字符串表达式，标识所要创建的文件夹。

说明

如果指定的文件夹已经存在则出错。

下面的代码说明了如何使用 CreateFolder 方法来创建一个文件夹。

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateFolder("c:\\new folder");
[VBScript]
Function CreateFolderDemo
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.CreateFolder("c:\New Folder")
   CreateFolderDemo = f.Path
End Function

请参阅

CopyFolder 方法 | DeleteFolder 方法 | MoveFolder 方法
应用于：FileSystemObject 对象


CreateTextFile 方法

创建指定的文件名并返回一个 TextStream 对象，可以使用这个对象对文件进行读写。

object.CreateTextFile(filename[, overwrite[, unicode]])

参数

object
必选项。应为 FileSystemObject 或 Folder 对象的名称。
filename
必选项。指明所要创建文件的字符串表达式。
overwrite
可选项。Boolean 值，指明能否覆盖已有文件。如果文件可以覆盖，则值为 true ，否则为 false。如果忽略，则已有文件不能被覆盖。
unicode
可选项。Boolean 值，指明文件是否以 Unicode 或 ASCII 文件方式创建。如果文件作为 Unicode 文件创建，则值为 true ，如果作为 ASCII 文件创建，则为 false。如果忽略，则假定为 ASCII 文件。

说明

下面的代码说明了如何使用 CreateTextFile 方法来创建和打开一个文本文件。

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();
[VBScript]
Sub CreateAfile
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
   MyFile.WriteLine("This is a test.")
   MyFile.Close
End Sub

如果 overwrite 参数是 false ，或者没有提供这个参数，那么对于已有的 filename 将产生一个错误。

请参阅

CreateFolder 方法 | OpenAsTextStream 方法 | OpenTextFile 方法
应用于：FileSystemObject 对象 | Folder 对象


DateCreated 属性

返回指定文件或文件夹的创建日期和时间。只读。

object.DateCreated

object 应为 File 或 Folder 对象。

说明

下面的代码通过一个文件说明了 DateCreated 属性的用法：

[JScript]
function ShowFileInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = "Created：" + f.DateCreated;
   return(s);
}
[VBScript]
Function ShowFileInfo(filespec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   ShowFileInfo = "Created：" & f.DateCreated
End Function

请参阅

Attributes 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：File 对象 | Folder 对象


Delete 方法

删除指定的文件或文件夹。

object.Delete( force );

参数

object
必选项。应为 File 或 Folder 对象的名称。
force
可选项。Boolean 值，如果要删除设置了只读属性的文件或文件夹则为 True ；否则为 False （默认）。

说明

如果指定的文件或文件夹不存在，那么会产生一个错误。

Delete 方法对于单个 File 或 Folder 产生的结果和使用 FileSystemObject.DeleteFile 或 FileSystemObject.DeleteFolder 所执行的操作结果一样。

Delete 方法对于包含内容和不包含内容的文件夹不做区分。删除指定的文件夹时不考虑是否包含了内容。

下面的例子说明了 Delete 方法的用法。

[JScript]
var fso, f;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.CreateTextFile("c:\\testfile.txt", true);
f.WriteLine("This is a test.");
f.Close();
f = fso.GetFile("c:\\testfile.txt");
f.Delete();
[VBScript]
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close
Set MyFile = fso.GetFile("c:\testfile.txt")
MyFile.Delete

请参阅

Copy 方法 | DeleteFile 方法 | DeleteFolder 方法 | Move 方法 | OpenAsTextStream 方法
应用于：File 对象 | Folder 对象


DeleteFile 方法

删除指定文件。

object.DeleteFile ( filespec[, force] );

参数

object
必选项。应为 FileSystemObject 的名称。
filespec
必选项。要删除的文件的名称。filespec 可以在最后的路径成分中包含通配字符。
force
可选项。Boolean 值，如果要删除设置了只读属性的文件，则为 true ；如果不删除则为 false （默认）。

说明

如果找不到匹配的文件则出错。DeleteFile 方法在遇到第一个错误时终止。出错后不试图回滚或撤消出错前做的修改。

下面的例子说明了 DeleteFile 方法的用法。

[JScript]
function DeleteFile(filespec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.DeleteFile(filespec);
}
[VBScript]
Sub DeleteAFile(filespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.DeleteFile(filespec)
End Sub

请参阅

CopyFile 方法 | CreateTextFile 方法 | Delete 方法 | DeleteFolder 方法 | MoveFile 方法
应用于：FileSystemObject 对象


DeleteFolder 方法

删除指定的文件夹及其内容。

object.DeleteFolder ( folderspec[, force] );

参数

object
必选项。应为 FileSystemObject 的名称。
folderspec
必选项。要删除的文件夹的名称。folderspec 可以在最后的路径成分中包含通配字符。
force
可选项。Boolean 值，如果要删除设置了只读属性的文件夹，则为 true ；否则为 false （默认）。

说明

DeleteFolder 方法不区分文件夹是否包含了内容。删除指定的文件夹时不考虑其中是否有内容。

如果找不到匹配的文件夹则出错。DeleteFolder 方法在遇到第一个错误时终止。出错后不试图回滚或撤消出错前做的修改。

下面的例子说明了 DeleteFolder 方法的用法。

[JScript]
function DeleteFolder(folderspec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.DeleteFolder(folderspec);
}
[VBScript]
Sub DeleteAFolder(filespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.DeleteFolder(filespec)
End Sub

请参阅

CopyFolder 方法 | CreateFolder 方法 | Delete 方法 | DeleteFile 方法 | MoveFolder 方法
应用于：FileSystemObject 对象


DriveExists 方法

如果指定的驱动器存在则返回 True ；如果不存在则返回 False。

object.DriveExists(drivespec)

参数

object
必选项。应为 FileSystemObject 的名称。
drivespec
必选项。驱动器号或完整的路径说明。

说明

对于可移动媒体的驱动器， 即使没有媒体 DriveExists 方法也返回 true。可以使用 Drive 对象的 IsReady 属性来决定驱动器是否就绪。

下面的例子说明了 DriveExists 方法的用法。

[JScript]
function ReportDriveStatus(drv)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.DriveExists(drv))
      s += "Drive " + drv + " exists.";
   else
      s += "Drive " + drv + " doesn't exist.";
   return(s);
}
[VBScript]
Function ReportDriveStatus(drv)
   Dim fso, msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   If fso.DriveExists(drv) Then
      msg = ("Drive " & UCase(drv) & " exists.")
   Else
      msg = ("Drive " & UCase(drv) & " doesn't exist.")
   End If
   ReportDriveStatus = msg
End Function

请参阅

Drive Object | Drives Collection | FileExists 方法 | FolderExists 方法 | GetDrive 方法 | GetDriveName 方法 | IsReady 属性
应用于：FileSystemObject 对象


FileExists 方法

如果指定文件存在返回 True ;否则返回 False。

object.FileExists(filespec)

参数

object
必选项。应为 FileSystemObject 的名称。
filespec
必选项。需要判定是否存在的文件的名称. 如果文件可能不在当前文件夹中,那么必须提供完整的路径说明（可以是绝对的或相对的）。

下面的例子说明了 FileExists 方法的用法。

[JScript]
function ReportFileStatus(filespec)
{
   var fso, s = filespec;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.FileExists(filespec))
      s += " exists.";
   else
      s += " doesn't exist.";
   return(s);
}
[VBScript]
Function ReportFileStatus(filespec)
   Dim fso, msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   If (fso.FileExists(filespec)) Then
      msg = filespec & " exists."
   Else
      msg = filespec & " doesn't exist."
   End If
   ReportFileStatus = msg
End Function

请参阅

DriveExists 方法 | FolderExists 方法 | GetFile 方法 | GetFileName 方法
应用于：FileSystemObject 对象


Files 属性

返回一个 Files 集合，由指定文件夹中包含的所有 File 对象组成，包括设置了隐藏和系统文件属性的文件。

object.Files

object 应为 Folder 对象。

说明

下面的代码说明了 Files 属性的用法：

[JScript]
function ShowFolderFileList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}
[VBScript]Function ShowFileList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name
      s = s &   "<BR>"
   Next
   ShowFileList = s
End Function

请参阅

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

应用于：Folder 对象


FolderExists 方法

如果指定的文件夹存在则返回 True ；否则返回 False。

object.FolderExists(folderspec)

参数

object
必选项。应为 FileSystemObject 的名称。
folderspec
必选项。需要判定是否存在的文件夹的名称。如果文件夹可能不在当前文件夹中，那么必须提供完整的路径说明（可以是绝对的或相对的）。

下面的例子说明了 FileExists 方法的用法。

[JScript]
function ReportFolderStatus(fldr)
{
   var fso, s = fldr;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   if (fso.FolderExists(fldr))
      s += " exists.";
   else
      s += " doesn't exist.";
   return(s);
}
[VBScript]
Function ReportFolderStatus(fldr)
   Dim fso, msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   If (fso.FolderExists(fldr)) Then
      msg = fldr & " exists."
   Else
      msg = fldr & " doesn't exist."
   End If
   ReportFolderStatus = msg
End Function

请参阅

DriveExists 方法 | FileExists 方法 | GetFolder 方法 | GetParentFolderName 方法
应用于：FileSystemObject 对象


GetAbsolutePathName 方法

根据提供的路径说明返回明确完整的路径。

object.GetAbsolutePathName(pathspec)

参数

object
必选项。应为 FileSystemObject 的名称。
pathspec
必选项。要变为明确完整路径的路径说明。

说明

如果路径提供了从指定驱动器的根开始的完整的引用，那么它就是明确和完整的。如果路径指定的是映射驱动器的根文件夹，那么完整的路径将只能由一个路径分隔符 (\) 结束。

假设当前目录是 c:\mydocuments\reports ，下表说明了 GetAbsolutePathName 方法的操作。

pathspec | 返回的路径
"c:" | "c:\mydocuments\reports"
"c:.." | "c:\mydocuments"
"c:\\" | "c:\"
"c:*.*\\may97" | "c:\mydocuments\reports\*.*\may97"
"region1" | "c:\mydocuments\reports\region1"
"c:\\..\\..\\mydocuments" | "c:\mydocuments"

下面的例子说明了 GetAbsolutePathName 方法的用法。

function ShowAbsolutePath(path)
{
   var fso, s= "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetAbsolutePathName(path);
   return(s);
}

请参阅

GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFlieVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetBaseName 方法

返回字符串，该字符串包含路径中最后成分中的基本名称，不包含文件扩展名。

object.GetBaseName(path)

参数

object
必选项。应为 FileSystemObject 的名称。
path
必选项。为将返回其最后成分中的基本名称指定路径。

说明

如果没有成分和 path 参数匹配，那么 GetBaseName 方法将返回长度为零的字符串 ("")。

注意 GetBaseName 方法只作用于所提供的 path 字符串。它不试图解析路径，也不检查指定路径是否存在。

下面的例子说明了 GetBaseName 方法的用法。

[JScript]
function ShowBaseName(filespec)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetBaseName(filespec);
   return(s);
}
[VBScript]
Function GetTheBase(filespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetTheBase = fso.GetBaseName(filespec)
End Function

请参阅

GetAbsolutePathName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetDrive 方法

返回相应于指定路径中驱动器的 Drive 对象。

object.GetDrive ( drivespec );

参数

object
必选项。应为 FileSystemObject 的名称。
drivespec
必选项。drivespec 参数可以是驱动器号 (c) 、带冒号的驱动器号 (c:) 、带冒号和路径分隔符的驱动器号 (c:\) ，或者任意网络共享的说明 (\\computer2\share1)。

说明

对于网络共享，需要进行检查以确保共享存在。

如果 drivespec 和可接受的形式不一致或是不存在，那么将产生错误。

要在普通的路径字符串上调用 GetDrive 方法，可以使用以下序列来获取适于作为 drivespec 的字符串。

[JScript]
DriveSpec = GetDriveName(GetAbsolutePathName(Path))
[JScript]

下面的例子说明了 GetDrive 方法的用法。

[JScript]
function ShowFreeSpace(drvPath)
{
   var fso, d, s ="";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath.toUpperCase( ) + " - ";
   s += d.VolumeName + "<br>";
   s += "Free Space: " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
DriveSpec = GetDriveName(GetAbsolutePathName(Path))

[VBScript]

下列示例说明了 GetDrive 方法的用法：

[VBScript]
Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetDriveName 方法

根据指定路径返回包含驱动器名称的字符串。

object.GetDriveName(path)

参数

object
必选项。应为 FileSystemObject 的名称。
path
必选项。路径说明，将根据其中成分返回驱动器名称。

说明

如果无法确定驱动器，GetDriveName 方法将返回长度为零的字符串 ("")。

注意 GetDriveName 只作用于所提供的 path 字符串。不会试图解析路径，也不会检查指定的路径是否存在。

下面的例子说明了 GetDriveName 方法的用法。

[JScript]
function GetDriveLetter(path)
{
   var fso, s ="";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(path)));
   return(s);
}
[VBScript]
Function GetAName(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetAName = fso.GetDriveName(Drivespec)
End Function

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetExtensionName 方法

返回包含路径中最后成分扩展名的字符串。

object.GetExtensionName(path)

参数

object
必选项。应为 FileSystemObject 的名称。
path
必选项。路径说明，将根据其中的成分返回其扩展名。

说明

对于网络驱动器，根目录 (\) 将被认为是一个成分。

如果没有和 path 参数匹配的成分，那么 GetExtensionName 方法将返回长度为零的字符串 ("")。

下面的例子说明了 GetExtensionName 方法的用法。

[JScript]
function ShowExtensionName(filespec)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetExtensionName(filespec);
   return(s);
}
[VBScript]
Function GetAnExtension(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetAnExtension = fso.GetExtensionName(Drivespec)
End Function

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetFile 方法

根据指定的路径中的文件返回相应的 File 对象。

object.GetFile(filespec)

参数

object
必选项。应为 FileSystemObject 的名称。
filespec
必选项。filespec 是指定文件的路径（绝对和或相对的）。

说明

如果指定文件不存在则出错。

下面的例子说明了 GetFile 方法的用法。

[JScript]
function ShowFileAccessInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.Path.toUpperCase() + "<br>";
   s += "Created: " + f.DateCreated + "<br>";
   s += "Last Accessed: " + f.DateLastAccessed + "<br>";
   s += "Last Modified: " + f.DateLastModified
   return(s);
}
[VBScript]
Function ShowFileAccessInfo(filespec)
   Dim fso, f, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   s = f.Path & "<br>"
   s = s & "Created: " & f.DateCreated & "<br>"
   s = s & "Last Accessed: " & f.DateLastAccessed & "<br>"
   s = s & "Last Modified: " & f.DateLastModified
   ShowFileAccessInfo = s
End Function

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetFileName 方法

返回指定路径的最后成分，但指定的路径不能只是驱动器说明。

object.GetFileName(pathspec)

参数

object
必选项。应为 FileSystemObject 的名称。
pathspec
必选项。指定文件的路径（绝对的或相对的）。

说明

如果 pathspec 没有以文件名成分结束，那么 GetFileName 方法将返回长度为零的字符串 ("")。

注意 GetFileName 方法只作用于所提供的路径字符串。不会试图解析路径，也不会检查路径存在与否。

下面的例子说明了 GetFileName 方法的用法。

[JScript]
function ShowFileName(filespec)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetFileName(filespec);
   return(s);
}
[VBScript]
Function GetAName(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetAName = fso.GetFileName(DriveSpec)
End Function

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject Object


GetFileVersion 方法

返回指定文件的版本号。

object.GetFileVersion(pathspec)

参数

object
必选项。始终为 FileSystemObject 的名称。
pathspec
必选项。到指定文件的路径（绝对路径或相对路径）。

说明

如果 pathspec 不是以命名组件结尾，GetFileVersion 方法返回一个零长度字符串 ("")。

注意 GetFileVersion 方法法只作用于所提供的路径字符串。不会试图解析路径，也不会检查路径存在与否。

下面的例子说明了 GetFileVersion 方法的用法。

[JScript]
function ShowFileName(filespec){
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetFileVersion(filespec);
   return(s);
}
[VBScript]
Function GetVersion(DriveSpec)
   Dim fso, temp
   Set fso = CreateObject("Scripting.FileSystemObject")
   temp = fso.GetFileVersion(pathspec)
   If Len(temp) Then
      GetVersion = temp
   Else
      GetVersion = "No version information available."
   End If
End Function

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetFolder 方法

根据指定路径中的文件夹返回相应的 Folder 对象。

object.GetFolder(folderspec)

参数

object
必选项。应为 FileSystemObject 的名称。
folderspec
必选项。folderspec 是指定文件夹的路径（绝对的或相对的）。

说明

如果指定的文件夹不存在则出错。

下面的例子说明了 GetFolder 方法的用法。

[JScript]
function ShowFolderList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.SubFolders);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}
[VBScript]
Sub AddNewFolder(path, folderName)
   Dim fso, f, fc, nf
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(path)
   Set fc = f.SubFolders
   If folderName <> "" Then
      Set nf = fc.Add(folderName)
   Else
      Set nf = fc.Add("New Folder")
   End If
End Sub

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetParentFolderName 方法

根据指定路径中的最后成分返回包含其父文件夹名称的字符串。

object.GetParentFolderName(path)

参数

object
必选项。应为 FileSystemObject 的名称。
path
必选项。路径说明，将根据其中成分返回其父文件夹的名称。

说明

如果 path 参数中指定的成分没有父文件夹，那么 GetParentFolderName 方法将返回长度为零的字符串 ("")。

注意 GetParentFolderName 方法只作用于所提供的 path 字符串。不会试图解析路径，也不会检查指定的路径存在与否。

下面的例子说明了 GetParentFolderName 方法的用法。

[JScript]
function ShowParentFolderName(filespec)
{
   var fso, s = "";
   fso = new ActiveXObject("Scripting.FileSystemObject");
   s += fso.GetParentFolderName(filespec);
   return(s);
}
[VBScript]
Function GetTheParent(DriveSpec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   GetTheParent = fso.GetParentFolderName(Drivespec)
End Function

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetSpecialFolder 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetSpecialFolder 方法

返回指定的特殊文件夹对象。

object.GetSpecialFolder(folderspec)

参数

object
必选项。应为 FileSystemObject 的名称。
folderspec
必选项。要返回的特殊文件夹的名称。可以为下面设置中显示的任意常数。

设置

folderspec 参数可以取以下的任意值：

常数 | 值 | 描述
WindowsFolder | 0 | Windows 文件夹，包含了由 Windows 操作系统安装的文件。
SystemFolder | 1 | 包含库、字体，以及设备驱动程序的 System 文件夹
TemporaryFolder | 2 | 用于存储临时文件的 Temp 文件夹。这个路径可以在 TMP 环境变量中找到。

下面的例子说明了 GetSpecialFolder 方法的用法。

[JScript]
var fso, tempfile;
fso = new ActiveXObject("Scripting.FileSystemObject");

function CreateTempFile()
{
   var tfolder, tfile, tname, fname, TemporaryFolder = 2;
   tfolder = fso.GetSpecialFolder(TemporaryFolder);
   tname = fso.GetTempName();
   tfile = tfolder.CreateTextFile(tname);
   return(tfile);
}
tempfile = CreateTempFile();
tempfile.writeline("Hello World");
tempfile.close();
[VBScript]
Dim fso, tempfile
Set fso = CreateObject("Scripting.FileSystemObject")

Function CreateTempFile
   Dim tfolder, tname, tfile
   Const TemporaryFolder = 2
   Set tfolder = fso.GetSpecialFolder(TemporaryFolder)
   tname = fso.GetTempName
   Set tfile = tfolder.CreateTextFile(tname)
   Set CreateTempFile = tfile
End Function

Set tempfile = CreateTempFile
tempfile.WriteLine "Hello World"
tempfile.Close

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetTempName 方法
应用于：FileSystemObject 对象


GetTempName 方法

返回一个随机产生的临时文件或文件夹名，有助于执行那些需要临时文件或文件夹的操作。

object.GetTempName ( );

可选的 object 应为 FileSystemObject 的名称。

说明

GetTempName 方法并不创建文件。它只提供一个临时文件名，可以通过 CreateTextFile 来创建文件。

下面的例子说明了 GetTempName 方法的用法。

[JScript]
var fso, tempfile;
fso = new ActiveXObject("Scripting.FileSystemObject");

function CreateTempFile()
{
   var tfolder, tfile, tname, fname, TemporaryFolder = 2;
   tfolder = fso.GetSpecialFolder(TemporaryFolder);
   tname = fso.GetTempName();
   tfile = tfolder.CreateTextFile(tname);
   return(tfile);
}
tempfile = CreateTempFile();
tempfile.writeline("Hello World");
tempfile.close();
[VBScript]
Dim fso, tempfile
Set fso = CreateObject("Scripting.FileSystemObject")

Function CreateTempFile
   Dim tfolder, tname, tfile
   Const TemporaryFolder = 2
   Set tfolder = fso.GetSpecialFolder(TemporaryFolder)
   tname = fso.GetTempName
   Set tfile = tfolder.CreateTextFile(tname)
   Set CreateTempFile = tfile
End Function

Set tempfile = CreateTempFile
tempfile.WriteLine "Hello World"
tempfile.Close

请参阅

GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFileVersion 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法
应用于：FileSystemObject 对象


Move 方法

将指定文件或文件夹从一个位置移动到另一个位置。

object.Move( destination );

参数

object
必选项。应为 File 或 Folder 对象的名称。
destination
必选项。移动文件或文件夹的目的位置。不允许通配字符。

说明

Move 方法对于单个 File 或 Folder 产生的结果和使用 FileSystemObject.MoveFile 或 FileSystemObject.MoveFolder 所执行的操作结果一样。但是请注意，后两种替换方法都能够移动多个文件或文件夹。

请参阅

Copy 方法 | Delete 方法 | MoveFile 方法 | MoveFolder 方法 | OpenAsTextStream 方法
应用于：File 对象 | Folder 对象


MoveFile 方法

从一个位置向另一个位置移动一个或多个文件。

object.MoveFile ( source, destination );

参数

object
必选项。应为 FileSystemObject 的名称。
source
必选项。所要移动的文件的路径。source 参数的字符串只能在路径的最后成分中包含通配字符。
destination
必选项。文件要移到的路径。destination 参数不能包含通配字符。

说明

如果 source 包含了通配字符，或者 destination 以路径分隔符 (\) 结束，那么将假定 destination 指定了一个已有的文件夹，匹配的文件将移入其中。否则，将假定 destination 为需要创建的目的文件名。无论哪种情况，如果移动的是单个文件，将有三种可能：

  • 如果 destination 不存在，那么那么文件将被移动。这是普通情况。
  • 如果 destination 是已经存在了的文件，那么将出错。
  • 如果 destination 是目录，那么也将出错。

如果 source 中使用的通配字符无法匹配任何文件，那么也将出错。MoveFile 方法在遇到第一个错误时终止。出错后不会试图回滚任何出错前所做的修改。

注意 只有在操作系统支持时，才能通过这种方法在卷之间移动文件。

下面的例子说明了 MoveFile 方法的用法：

[JScript]
function MoveFile2Desktop(filespec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.MoveFile(filespec, "c:\\windows\\desktop\\");
}
[VBScript]
Sub MoveAFile(Drivespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.MoveFile Drivespec, "c:\windows\desktop\"
End Sub

请参阅

CopyFile 方法 | DeleteFile 方法 | GetFile 方法 | GetFileName 方法 | Move 方法 | MoveFolder 方法 | OpenTextFile 方法
应用于：FileSystemObject 对象


MoveFolder 方法

从一个位置向另一个位置移动一个或多个文件夹。

object.MoveFolder ( source, destination );

参数

object
必选项。应为 FileSystemObject 的名称。
source
必选项。要移动的文件夹的路径。source 参数的字符串只能在路径的最后成分中包含通配字符。
destination
必选项。文件夹要移入的路径。destination 参数不能包含通配字符。

说明

如果 source 包含了通配字符，或者 destination 以路径分隔符 (\) 结束，那么将假定 destination 指定的是已经存在了的文件夹，匹配的文件将移入其中。否则将假定 destination 是需要创建的目的文件夹的名称。无论哪种情况，如果移动的是单个文件夹，将会有三种可能：

  • 如果 destination 不存在，那么文件夹将被移动。这是普通情况。
  • 如果 destination 是已有的文件，那么将出错。
  • 如果 destination 是目录，那么也将出错。

如果 source 中使用的通配字符无法匹配任何文件夹，那么也将出错。MoveFolder 方法在遇到第一个错误时终止。出错后不会试图回滚出错前所做的修改。

重要 只有在操作系统支持时，才能通过这个方法在卷之间移动文件夹。

下面的例子说明了 MoveFolder 方法的用法：

[JScript]
function MoveFldr2Desktop(fldrspec)
{
   var fso;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.MoveFolder(fldrspec, "c:\\windows\\desktop\\");
}
[VBScript]
Sub MoveAFolder(Drivespec)
   Dim fso
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.MoveFolder Drivespec, "c:\windows\desktop\"
End Sub

请参阅

CopyFile 方法 | DeleteFile 方法 | GetFile 方法 | GetFileName 方法 | Move 方法 | MoveFile 方法 | OpenTextFile 方法
应用于：FileSystemObject 对象


OpenAsTextStream 方法

打开指定的文件并返回一个 TextStream 对象，可以通过这个对象对文件进行读、写或追加。

object.OpenAsTextStream([iomode, [format]])

参数

object
必选项。应为 File 对象的名称。
iomode
可选项。指明输入/输出的模式。可以是三个常数之一： ForReading 、 ForWriting 或 ForAppending 。
format
可选项。使用三态值中的一个来指明打开文件的格式。如果忽略，文件将以 ASCII 格式打开。

设置

iomode 参数可以是下列设置中的任一种：

常数 | 值 | 描述
ForReading | 1 | 以只读方式打开文件。不能写这个文件。
ForWriting | 2 | 以写方式打开文件。如果存在同名的文件，那么它以前的内容将被覆盖。
ForAppending | 8 | 打开文件并从文件末尾开始写。

format 参数可以是下列设置中的任一种：

常数 | 值 | 描述
TristateUseDefault | -2 | 使用系统默认值打开文件。
TristateTrue | -1 | 以 Unicode 方式打开文件。
TristateFalse | 0 | 以 ASCII 方式打开文件。

说明

OpenAsTextStream 方法提供的功能和 FileSystemObject 的 OpenTextFile 方法一样。另外， OpenAsTextStream 方法可以用来写文件。

下面的代码说明了 OpenAsTextStream 方法的用法：

[JScript]
function TextStreamTest( )
{
   var fso, f, ts, s;
   var ForReading = 1, ForWriting = 2, ForAppending = 8;
   var TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   fso.CreateTextFile( "test1.txt" );           // 创建文件。
   f = fso.GetFile("test1.txt");
   ts = f.OpenAsTextStream(ForWriting, TristateUseDefault);
   ts.Write( "Hello World" );
   ts.Close( );
   ts = f.OpenAsTextStream(ForReading, TristateUseDefault);
   s = ts.ReadLine( );
   ts.Close( );
   return(s);
}
[VBScript]
Function TextStreamTest
   Const ForReading = 1, ForWriting = 2, ForAppending = 8
   Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
   Dim fso, f, ts
   Set fso = CreateObject("Scripting.FileSystemObject")
   fso.CreateTextFile "test1.txt"   ' Create a file.
   Set f = fso.GetFile("test1.txt")
   Set ts = f.OpenAsTextStream(ForWriting, TristateUseDefault)
   ts.Write "Hello World"
   ts.Close
   Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
   TextStreamTest = ts.ReadLine
   ts.Close
End Function

请参阅

Copy 方法 | CreateTextFile 方法 | Delete 方法 | Move 方法 | OpenTextFile 方法
应用于：File 对象


OpenTextFile 方法

打开指定的文件并返回一个 TextStream 对象，可以通过这个对象对文件进行读、写或追加。

object.OpenTextFile(filename[, iomode[, create[, format]]])

参数

object
必选项。object 应为 FileSystemObject 的名称。
filename
必选项。指明要打开文件的字符串表达式。
iomode
可选项。可以是三个常数之一：ForReading 、 ForWriting 或 ForAppending 。
create
可选项。Boolean 值，指明当指定的 filename 不存在时是否创建新文件。如果创建新文件则值为 True ，如果不创建则为 False 。如果忽略，则不创建新文件。
format
可选项。使用三态值中的一个来指明打开文件的格式。如果忽略，那么文件将以 ASCII 格式打开。

设置

iomode 参数可以是下列设置中的任一种：

常数 | 值 | 描述
ForReading | 1 | 以只读方式打开文件。不能写这个文件。
ForWriting | 2 | 以写方式打开文件
ForAppending | 8 | 打开文件并从文件末尾开始写。

format 参数可以是下列设置中的任一种：

值 | 描述
TristateTrue | 以 Unicode 格式打开文件。
TristateFalse | 以 ASCII 格式打开文件。
TristateUseDefault | 使用系统默认值打开文件。

说明

下面的代码说明了如何使用 OpenTextFile 方法打开文件并追加文本：

[JScript]
var fs, a, ForAppending;
ForAppending = 8;
fs = new ActiveXObject("Scripting.FileSystemObject");
a = fs.OpenTextFile("c:\\testfile.txt", ForAppending, false);
...
a.Close();
[VBScript]
Sub OpenTextFileTest
   Const ForReading = 1, ForWriting = 2, ForAppending = 8
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   f.Close
End Sub

请参阅

CreateTextFile 方法 | OpenAsTextStream 方法
应用于：FileSystemObject 对象


Read 方法 (FileSystemObject)

脚本运行时库

Read 方法

从TextStream 文件中读取指定数量的字符，并返回由此得到的字符串。

object.Read(characters)

参数

object
必选项。总是 TextStream 对象的名称。
characters
必选项。要从该文件读取的字符个数。

下面的示例演示类如何使用 Read 方法来从文件中读取六个字符 Header，并返回获得的字符串：

[JScript]
function GetHeader()
{
   var fso, f;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.Write("Header");
   f.Write("1234567890987654321");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   return(f.Read(6));
}
[VBScript]
Function ReadTextFileTest
   Const ForReading = 1, ForWriting = 2, ForAppending = 8
   Dim fso, f, Msg
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   ReadTextFileTest = f.Read(5)
End Function

请参阅

ReadAll 方法 | ReadLine 方法 | Skip 方法 | SkipLine 方法
应用于：TextStream 对象


ReadAll 方法 (FileSystemObject)

脚本运行时库

ReadAll 方法

读取 TextStream 文件的全部内容并返回由此得到的字符串。

object.ReadAll( );

object 总是 TextStream 对象的名称。

说明

对大文件而言，使用 ReadAll 方法将会耗费内存资源。可以使用其他技术来输入一个文件，如逐行读取文件。

下面的示例演示了 ReadAll 方法的用法：

[JScript]
function GetEverything()
{
   var fso, f;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.Write("Header");
   f.Write("1234567890987654321");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   return(f.ReadAll());
}
[VBScript]
Function ReadAllTextFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   ReadAllTextFile =   f.ReadAll
End Function

请参阅

Read 方法 | ReadLine 方法 | Skip 方法 | SkipLine 方法

应用于：TextStream 对象


ReadLine 方法 (FileSystemObject)

脚本运行时库

ReadLine 方法

从TextStream 文件中读取一整行（一直到换行符，但不包括换行符），并返回由此得到的字符串。

object.ReadLine( )

object 参数总是 TextStream 对象的名称。

说明

下面的示例演示了Line 属性的用法：

[JScript]
function GetLine()
{
   var fso, f, r;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.WriteLine("Hello world!");
   f.WriteLine("JScript is fun");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   r =  f.ReadLine();
   return(r);
}
[VBScript]
Function ReadLineTextFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, MyFile
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set MyFile = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   MyFile.WriteLine "Hello world!"
   MyFile.WriteLine "The quick brown fox"
   MyFile.Close
   Set MyFile = fso.OpenTextFile("c:\testfile.txt", ForReading)
   ReadLineTextFile = MyFile.ReadLine    ' Returns "Hello world!"
End Function

请参阅

Read 方法 | ReadAll 方法 | Skip 方法 | SkipLine 方法
应用于：TextStream 对象


Skip 方法 (FileSystemObject)

脚本运行时库

Skip 方法

在读取 TextStream 文件时跳过指定个数的字符。

object.Skip(characters)

参数

object
必选项。总是某个 TextStream 对象的名称。
characters
必选项。在读取文件时要跳过的字符个数。

说明

被跳过的字符即被放弃。

下面的示例演示了Skip 方法的用法：

[JScript]
function SkipDemo()
{
   var fso, f, r;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.WriteLine("Hello world!");
   f.WriteLine("JScript is fun");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   f.Skip(6);
   r = f.ReadLine();
   return(r);
}
[VBScript]
Function SkipTextFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   f.Skip(6)
   SkipTextFile =   f.ReadLine
End Function

请参阅

Close 方法 | Read 方法 | ReadAll 方法 | ReadLine 方法 | SkipLine 方法 | Write 方法 | WriteLine 方法 | WriteBlankLines 方法
应用于：TextStream 对象


SkipLine 方法 (FileSystemObject)

脚本运行时库

SkipLine 方法

在读取TextStream 文件时跳过下一行。

object.SkipLine( )

object 总是一个 TextStream 对象的名称。

说明

下面的示例演示了SkipLine 方法的用法：

[JScript]
function SkipLineDemo()
{
   var fso, f, r
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true)
   f.WriteLine("Hello world!");
   f.WriteLine("JScript is fun");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   f.SkipLine();
   r = f.ReadLine();
   return(r);
}
[VBScript]
Function SkipLineInFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!" & vbCrLf & "VB Script is fun!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   f.SkipLine
   SkipLineInFile = f.ReadLine
End Function

请参阅

Read 方法 | ReadAll 方法 | ReadLine 方法 | Skip 方法
应用于：TextStream 对象


Write 方法 (FileSystemObject)

脚本运行时库

Write 方法

将给定的字符串写入到一个 TextStream 文件。

object.Write(string)

参数

object
必选项。总是一个 TextStream 对象的名称。
string
必选项。要写入文件的文本。

说明

给定的字符串在写入该文件时不会在字符串之间插入空格或字符。可以使用 WriteLine 方法来写入一个换行符或以换行符结束的字符串。

下面的示例演示了Write 方法的用法：

[JScript]
function WriteDemo()
{
   var fso, f, r
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject")
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true)
   f.Write("Hello world!");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   r = f.ReadLine();
   return(r);
}
[VBScript]
Function WriteToFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.Write "Hello world!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   WriteToFile =   f.ReadLine
End Function

请参阅

WriteBlankLines 方法 | WriteLine 方法
应用于：TextStream 对象


WriteBlankLines 方法 (FileSystemObject)

脚本运行时库

WriteBlankLines 方法

将指定数量的换行符写入到一个 TextStream 文件。

object.WriteBlankLines(lines)

参数

object
必选项。总是一个 TextStream 对象的名称。
lines
必选项。要写入该文件的换行符的个数。

说明

下面的示例演示了WriteBlankLines 方法的用法：

[JScript]
function WriteBlanksDemo()
{
   var fso, f, r;
   var ForReading = 1, ForWriting = 2;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.OpenTextFile("c:\\testfile.txt", ForWriting, true);
   f.Write("Hello world!");
   f.WriteBlankLines(2);
   f.Write("JScript is fun!");
   f.Close();
   f = fso.OpenTextFile("c:\\testfile.txt", ForReading);
   r = f.ReadAll();
   return(r);
}
[VBScript]
Function WriteBlankLinesToFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.WriteBlankLines 2
   f.WriteLine "Hello World!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   WriteBlankLinesToFile = f.ReadAll
End Function

请参阅

Write 方法 | WriteLine 方法
应用于：TextStream 对象


WriteLine 方法 (FileSystemObject)

脚本运行时库

WriteLine 方法

向 TextStream 文件中写入给定的字符串和一个换行符。

object.WriteLine([string])

参数

object
必选项。总是一个 TextStream 对象的名称。
string
可选项。要写入该文件的文本。如果忽略该参数，则向该文件写入一个换行符。

说明

下面的示例演示了WriteLine 方法的用法：

[JScript]
var fso, f;
fso = new ActiveXObject("Scripting.FileSystemObject");
f = fso.CreateTextFile("c:\\testfile.txt", true);
f.WriteLine("This is a test.");
f.Close();
[VBScript]
Function WriteLineToFile
   Const ForReading = 1, ForWriting = 2
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.OpenTextFile("c:\testfile.txt", ForWriting, True)
   f.WriteLine "Hello world!"
   f.WriteLine "VBScript is fun!"
   Set f = fso.OpenTextFile("c:\testfile.txt", ForReading)
   WriteLineToFile = f.ReadAll
End Function

请参阅

Write 方法 | WriteBlankLines 方法
应用于：TextStream 对象


FileSystemObject 对象

本节内容

Dictionary 对象
存储数据键、项目对的对象。
Drive 对象
提供对某个磁盘驱动器或网络共享的属性的访问。
File 对象
提供对文件的所有属性的访问。
FileSystemObject 对象
提供对计算机文件系统的访问。
Folder 对象
提供对文件夹的所有属性的访问。
TextStream 对象
加快对文件的顺序访问。

相关章节

脚本运行时参考
构成脚本运行时参考的元素列表。
FileSystemObject 基础
FileSystemObject 的基本知识指南。
FileSystemObject 集合
可以与 FileSystemObject 对象模型一起使用的集合列表。


Drive 对象

提供对特定磁盘驱动器或网络共享属性的访问。

说明

下面的代码演示了如何用 Drive 对象访问驱动器属性：

[JScript]
function ShowFreeSpace(drvPath)
{
   var fso, d, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   d = fso.GetDrive(fso.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - " ;
   s += d.VolumeName + "<br>";
   s += "Free Space: " + d.FreeSpace/1024 + " Kbytes";
   return(s);
}
[VBScript]
Function ShowFreeSpace(drvPath)
   Dim fso, d, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set d = fso.GetDrive(fso.GetDriveName(drvPath))
   s = "Drive " & UCase(drvPath) & " - "
   s = s & d.VolumeName   & "<BR>"
   s = s & "Free Space: " & FormatNumber(d.FreeSpace/1024, 0)
   s = s & " Kbytes"
   ShowFreeSpace = s
End Function

方法

Drive 对象没有方法。

属性

AvailableSpace 属性 | DriveLetter 属性 | DriveType 属性 | FileSystem 属性 | FreeSpace 属性 | IsReady 属性 | Path 属性 | RootFolder 属性 | SerialNumber 属性 | ShareName 属性 | TotalSize 属性 | VolumeName 属性

请参阅

Drives 集合 | File 对象 | Files 集合 | Folder 对象 | Folders 集合 | GetDrive 方法


File 对象

提供对文件所有属性的访问。

说明

下面的代码演示了如何获得 File 对象以及如何查看它的一个属性。

[JScript]
function ShowFileInfo(filespec)
{
   var fso, f, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFile(filespec);
   s = f.DateCreated;
   return(s);
}
[VBScript]
Function ShowDateCreated(filespec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFile(filespec)
   ShowDateCreated = f.DateCreated
End Function

方法

Copy 方法 | Delete 方法 | Move 方法 | OpenAsTextStream 方法

属性

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | Type 属性

请参阅

Drive 对象 | Drives 集合 | Files 集合 | Folder 对象 | Folders 集合


FileSystemObject 对象

提供对计算机文件系统的访问。

说明

[JScript]

下面的代码演示了如何用 FileSystemObjext 返回可用于读或写的 TextStream 对象：

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();

[JScript]

在该例子代码中，ActiveXObject 对象被赋给 FileSystemObject (fso)。随后 CreateTextFile 方法创建文件 TextStream 对象 (a)，并用 WriteLine 方法将一行文本写入创建的文本文件。Close 方法刷新缓冲区并关闭该文件。

[VBScript]

下列代码说明如何使用 FileSystemObject 返回一个可以读取或写入的 TextStream 对象：

[VBScript]
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close

[VBScript]

在上述代码中，CreateObject 函数返回 FileSystemObject (fso)。然后 CreateTextFile 方法创建一个作为 TextStream 对象 (a) 的文件。之后 WriteLine 方法在所创建的文件中写入一行文本；Close 方法刷新缓冲区，并关闭该文件。

方法

BuildPath 方法 | CopyFile 方法 | CopyFolder 方法 | CreateFolder 方法 | CreateTextFile 方法 | DeleteFile 方法 | DeleteFolder 方法 | DriveExists 方法 | FileExists 方法 | FolderExists 方法 | GetAbsolutePathName 方法 | GetBaseName 方法 | GetDrive 方法 | GetDriveName 方法 | GetExtensionName 方法 | GetFile 方法 | GetFileName 方法 | GetFolder 方法 | GetParentFolderName 方法 | GetSpecialFolder 方法 | GetTempName 方法 | MoveFile 方法 | MoveFolder 方法 | OpenTextFile 方法

属性

Drives 属性

请参阅

Dictionary 对象 | Drive 对象 | Drives 集合 | File 对象 | Files 集合 | Folder 对象 | Folders 集合 | TextStream 对象


Folder 对象

提供对文件夹的所有属性的访问。

说明

下面的代码演示了如何获得 Folder 对象并返回它的一个属性：

[JScript]
function ShowFolderInfo(folderspec)
{
   var fso, folder, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   folder = fso.GetFolder(folderspec);
   s = folder.DateCreated;
   return(s);
}
[VBScript]
Function ShowDateCreated(folderspec)
   Dim fso, f
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   ShowDateCreated = f.DateCreated
End Function

方法

Copy 方法 | Delete 方法 | Move 方法 | OpenAsTextStream 方法

属性

Attributes 属性 | DateCreated 属性 | DateLastAccessed 属性 | DateLastModified 属性 | Drive 属性 | Files 属性 | IsRootFolder 属性 | Name 属性 | ParentFolder 属性 | Path 属性 | ShortName 属性 | ShortPath 属性 | Size 属性 | SubFolders 属性 | Type 属性

请参阅

Drive 对象 | Drives 集合 | File 对象 | Files 集合 | Folders 集合


TextStream 对象

方便对文件的顺序访问。

TextStream.{property  | method( )}

property 和 method 参数可以是与 TextStream 对象相连的任何属性和方法。请注意在实际使用时，TextStream 被从 FileSystemObject 返回的代表 TextStream 对象的变量占位符代替。

说明

在下面的代码中，a 是由 FileSystemObject 的 CreateTextFile 方法返回的 TextStream 对象：

[JScript]
var fso = new ActiveXObject("Scripting.FileSystemObject");
var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();
[VBScript]
Dim fso, MyFile
Set fso = CreateObject("Scripting.FileSystemObject")
Set MyFile= fso.CreateTextFile("c:\testfile.txt", True)
MyFile.WriteLine("This is a test.")
MyFile.Close

WriteLine 和 Close 是 TextStream 对象的两个方法。

方法

Close 方法 | Read 方法 | ReadAll 方法 | ReadLine 方法 | Skip 方法 | SkipLine 方法 | Write 方法 | WriteBlankLines 方法 | WriteLine 方法

属性

AtEndOfLine 属性 | AtEndOfStream 属性 | Column 属性 | Line 属性

请参阅

Dictionary 对象 | FileSystemObject 对象


FileSystemObject 集合

本节内容

Drives 集合
所有可用驱动器的集合（只读）。
Files 集合
文件夹内所有 File 对象的集合。
Folders 集合
Folder 对象内包含的所有 Folder 对象的集合。

相关章节

脚本运行时参考
构成脚本运行时参考的元素列表。
FileSystemObject 基础
FileSystemObject 的基本知识指南。


Drives 集合

所有可用驱动器的只读集合。

说明

可移动媒体的驱动器不需要插入媒体，就可以出现在 Drives 集合中。

[JScript]

下面这个例子说明了如何使用 Drives 属性来获取 Drives 集合以及如何使用 Enumerator 对象来遍历该集合：

[JScript]
function ShowDriveList()
{
   var fso, s, n, e, x;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   e = new Enumerator(fso.Drives);
   s = "";
   for (; !e.atEnd(); e.moveNext())
   {
      x = e.item();
      s = s + x.DriveLetter;
      s += " - ";
      if (x.DriveType == 3)
         n = x.ShareName;
      else if (x.IsReady)
         n = x.VolumeName;
      else
         n = "[Drive not ready]";
      s +=   n + "<br>";
   }
   return(s);
}

[VBScript]

下列代码说明了如何获取 Drives 集合，以及如何使用 For Each...Next 语句遍历该集合：

[VBScript]
Function ShowDriveList
   Dim fso, d, dc, s, n
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set dc = fso.Drives
   For Each d in dc
      n = ""
      s = s & d.DriveLetter & " - "
      If d.DriveType = Remote Then
         n = d.ShareName
      ElseIf d.IsReady Then
         n = d.VolumeName
      End If
      s = s & n & "<BR>"
   Next
   ShowDriveList = s
End Function

方法

Drives 集合没有方法。

属性

Count 属性 | Item 属性

请参阅

Drive 对象 | Drives 属性 | File 对象 | Files 集合 | Folder 对象 | Folders 集合


Files 集合

一个文件夹中所有 File 对象的集合。

说明

[JScript]

下面这个例子说明了如何获得一个 Files 集合以及如何使用 Enumerator 对象和 for 语句来遍历该集合：

[JScript]
function ShowFolderFileList(folderspec)
{
   var fso, f, f1, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.files);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}

[VBScript]

下列代码说明如何获取 Files 集合，以及如何使用 For Each...Next 语句遍历该集合：

[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.Files
   For Each f1 in fc
      s = s & f1.name
      s = s & "<BR>"
   Next
   ShowFolderList = s
End Function

方法

Files 集合没有方法。

属性

Count 属性 | Item 属性

请参阅

Drive 对象 | Drives 集合 | File 对象 | Folder 对象 | Folders 集合


Folders 集合

一个 Folder 对象中所包含的所有 Folder 对象的集合。

说明

[JScript]

下面这个例子说明了如何获得一个 Folders 集合以及如何使用 Enumerator 对象和 for 语句来遍历该集合：

[JScript]
function ShowFolderList(folderspec)
{
   var fso, f, fc, s;
   fso = new ActiveXObject("Scripting.FileSystemObject");
   f = fso.GetFolder(folderspec);
   fc = new Enumerator(f.SubFolders);
   s = "";
   for (; !fc.atEnd(); fc.moveNext())
   {
      s += fc.item();
      s += "<br>";
   }
   return(s);
}

[VBScript]

下列代码说明了如何获取 Folders 集合，以及如何使用 For Each...Next 语句遍历该集合：

[VBScript]
Function ShowFolderList(folderspec)
   Dim fso, f, f1, fc, s
   Set fso = CreateObject("Scripting.FileSystemObject")
   Set f = fso.GetFolder(folderspec)
   Set fc = f.SubFolders
   For Each f1 in fc
      s = s & f1.name
      s = s &   "<BR>"
   Next
   ShowFolderList = s
End Function

方法

Add 方法 (Folders)

属性

Count 属性 | Item 属性

请参阅

Drive 对象 | Drives 集合 | File 对象 | Files 集合 | Folder 对象 | SubFolders 属性


脚本编码器概述

脚本运行时库

脚本 Encoder 概述

脚本 Encoder 是一种简单的命令行工具，它使脚本设计者能够对自己的最终脚本进行编码，这样 Web 主机和 Web 客户机就不能查看或修改它们的源代码了。注意，这种编码只能防止他人偶然查看您的代码，但并不能防止执着的电脑黑客看到您的一举一动。

Web 设计者在 Web 页和服务器端的 Active Server Page (.ASP) 上使用脚本编写方法，来添加几乎可以想象的各种功能。此外，脚本编写还由 Windows® Scripting Host (WSH) 使用，并可用在许多其他应用程序中，其结果也同样令人难忘。

到目前为止，使用脚本的一个缺点在于它不能保护其中所包含的知识产权，也不能保证用户获得的内容即他们所创建的内容。高明的算法和精心设计的脚本总是完全可见的，因为它们是以纯文本的形式保存的。其结果是，每个级别的脚本用户都可以看到脚本设计者的代码，然后采用它，修改它，并使其成为自己的代码。很明显，如果要试图在竞争极为激烈的环境中获得一席之地，这就不是一个好的方法。

由于引入了脚本小程序，保护源代码就变得更为重要了。脚本设计者希望使用这种简单的部件结构，但他们未必希望将自己的源代码与别人共享。将脚本编码后，对最终文件任何部分的更改都将导致其不能工作，因此可确保已编码脚本的绝对完整性。

请参阅

使用脚本 Encoder | 脚本 Encoder 语法 | 脚本编码示例


使用脚本编码器

脚本运行时库

使用脚本 Encoder

脚本 Encoder 只对脚本代码进行编码，而不对文件的任何其他内容作任何改动，仍显示为纯文本。若要使用脚本 Encoder，请以普通方法开发和调试您的脚本，然后使用该实用程序对最终脚本进行编码。脚本 Encoder 在源代码中使用标记来标识应从哪里开始编码。

对于 Visual Basic® Scripting Edition (VBScript)，下面的示例说明如何使用编码标记来展示纯文本格式的版权信息：

<SCRIPT LANGUAGE="VBScript">
'Copyright© 1998. XYZ Productions. All rights reserved.
'**开始编码**
' 这里是您的代码。
</SCRIPT>

在 JScript® 中，编码标记如下所示：

<SCRIPT LANGUAGE="JScript">
//Copyright© 1998. ZYX Productions. All rights reserved.
//**开始编码**
// 这里是您的代码。
</SCRIPT>

当调用脚本 Encoder 时，脚本块中开始标记之前的全部内容都不会被编码，而脚本块中的其他内容都将被编码。因此，如果省略开始标记，整个脚本块都会被编码，但如果开始标记在脚本块的结尾处，就不会对任何内容进行编码。

进行编码后，应该知道 <SCRIPT> 标记中的语言指示项已发生了变化。对于 VBScript，新的指示项如下所示：

<SCRIPT LANGUAGE="VBScript.Encode">

对于 Jscript，新的指示项如下所示：

<SCRIPT LANGUAGE="JScript.Encode">

脚本 Encoder 的调用是在 MS-DOS 命令行上或“运行”对话框中进行的，如下所示：

SRCENC [开关] 输入文件 输出文件

请参阅

脚本 Encoder 概述 | 脚本 Encoder 语法 | 脚本编码示例


脚本编码器语法

脚本运行时库

脚本 Encoder 语法

对脚本源代码进行编码，以便使用户难以查看或修改源代码。

语法

SCRENC [/s] [/f] [/xl] [/l defLanguage ] [/e defExtension] 输入文件 输出文件

脚本 Encoder 语法有以下几个组成部分：

组成部分 | 说明
/s | 可选。此开关用于指定脚本 Encoder 在无提示方式下工作，也就是说，不生成任何屏幕输出。如果省略该开关，则默认情况是提供详细的输出。
/f | 可选。指定输入文件将要由输出文件覆盖。注意，该选项会破坏原来的输入源文件。如果省略该开关，将不会覆盖输入文件。
/xl | 可选。指定不将 @language 指令添加到 .ASP 文件的顶端。如果省略该开关，就会将 @language 指令添加到所有的 .ASP 文件中。
/l defLanguage | 可选。指定要在编码期间使用的默认脚本语言（JScript® 或 VBScript）。如果进行编码的文件内的脚本块不包含任何语言属性，则假定这些脚本块采用该指定语言。如果省略该开关，Jscript 就是 HTML 页和脚本小程序的默认语言，而 VBScript 是 Active Server Page 的默认语言。对于纯文本文件来说，默认脚本语言由文件扩展名（.js 或 .vbs）来确定。
/e defExtension | 可选。使输入文件与特定的文件类型相关联。如果不能从输入文件的扩展名中明显知道文件类型（即输入文件的扩展名不是一个可识别的扩展名），但文件内容确实属于可识别的类型，则使用该开关。该选项没有默认设置。如果文件的扩展名不可识别，并且未指定该选项，脚本 Encoder 就会因该文件不可识别而失败。可识别的文件扩展名有：.asa、.asp、.cdx、.htm、.html、.js、.sct 和 .vbs。
inputfile | 必需。要进行编码的输入文件名，包括任何与当前目录相关的必需路径信息。
outputfile | 必需。要生成的输出文件名，包括任何与当前目录相关的必需路径信息。

说明

脚本 Encoder 可处理四种类型的文件，它们是：

  • ASP。这种格式由一个文本 Active Server Page 组成，该页包含有效的 HTML 以及 <SCRIPT> ... </SCRIPT> 标记或 <% ... %> 标记中的嵌入脚本块。使用这种格式的应用程序包括 Microsoft® Internet Information 服务 (IIS)。可识别的文件扩展名有 .asp、.asa 和 .cdx。
  • HTML。这种格式由一个文本文件组成，该文件包含有效的 HTML 和嵌入脚本块。使用这种脚本格式的应用程序包括 Microsoft FrontPage®、Microsoft® Visual InterDev™ 和几乎所有的 Web 设计器和浏览器。可识别的文件扩展名有 .htm 和 .html。
  • 纯文本。这种格式由一个文本文件组成，该文件只包含周围没有标记的脚本。使用这种脚本格式的应用程序包括 Windows® Scripting Host (WSH) 和 Microsoft® Outlook®。可识别的文件扩展名有 .js 和 .vbs，它们在编码后分别变为 .jse 和 .vbe。
  • 脚本小程序。这种格式由一个文本文件组成，该文件内的 <SCRIPT> ... </SCRIPT> 标记中包含有效的脚本小程序代码。可识别的文件扩展名有 .sct 和 .wsh。

示例

下面的示例将介绍脚本 Encoder 的用法并简要说明生成的结果：

要对输入文件 test.html 进行编码，并生成输出文件 encode.html，请使用：

screnc test.html encode.html

要对输入文件 test.html 进行编码，并用已编码的输出文件覆盖输入文件，请使用：

screnc /f test.htm

要对当前目录中所有的 .ASP 文件进行编码，并将已编码的输出文件放在 c:\temp 中，请使用：

screnc *.asp c:\temp

要将当前目录中所有的文件都编码为 .ASP 文件，并放在 c:\temp 中，请使用：screnc /e asp *.* c:\temp

要对输入文件 test.htm 进行编码，并生成输出文件 encode.htm，以确保所有不具有指定的语言属性的脚本块都使用 VBScript，请使用：

screnc /l vbscript test.htm encode.htm

要对当前目录中的所有脚本小程序文件进行编码，并用已编码的文件覆盖它们而不显示任何消息，请使用：

screnc /s /f *.sct

请参阅

脚本 Encoder 概述 | 使用脚本 Encoder | 脚本编码示例


脚本编码示例

下面是 Web 页的一个简短示例，包含一些需要保护的 JScript 代码：

<HTML>
<HEAD>
<TITLE>Script Encoder Sample Page</TITLE>
<SCRIPT LANGUAGE="JScript">
<!--//
//Copyright© 1998 Microsoft Corporation.保留所有权利。
//**开始编码**
function verifyCorrectBrowser(){
if(navigator.appName == "Microsoft Internet Explorer")
if (navigator.appVersion.indexOf ("5.") >= 0)
return(true);
else
return(false);
}
function getAppropriatePage(){
var str1 = "Had this been an actual Web site，a page compatible with ";
var str2 = "browsers other than ";
var str3 = "Microsoft Internet Explorer 5.0 ";
var str4 = "would have been loaded.";
if (verifyCorrectBrowser())
document.write(str1 + str3 + str4);
else
document.write(str1 + str2 + str3 + str4);
}
//-->
</SCRIPT>
</HEAD>
<BODY onload="getAppropriatePage()">
</BODY>
</HTML>
Here's the same page as it appears after being run through the Script Encoder:
<HTML>
<HEAD>
<TITLE>Script Encoder Sample Page</TITLE>
<SCRIPT LANGUAGE="JScript.Encode">
<!--//
//Copyright© 1998 Microsoft Corporation.保留所有权利。
//**开始编码**#@~^QwIAAA==@#@&0;mDkWP7nDb0zZKD.n1YAMGhk+Dvb`@#@&P,kW`UC7kLlDGDcl22gl:n~{'~Jtr1DGkW6YP&xDnD+OPA62sKD+ME#@#@&P,~~k6PvxC\rLmYGDcCwa.n.kkWU bx[+X66Pcr*cJ#,@*{~!*P~P,P~.YEMU`DDEbIP,P,+s/n@#@&P~P,~PM+O;Mx`WC^/n#pN6EU1YbWx,oObaw.WaDrCD+nmL+v#@#@&~P7lMPdY.q,'~J_CN,Y4rkP4nnPCx,C1Y;mV,+(PkrY~~l,wCLPmKhwmYk(snPSkDt~JI@#@&P~\m.PkY.+,'PE8MWA/.kPGDtDPDtmUPri@#@&,P-CMP/D.&,'Pr\rmMWkWWY~(YnDnY,2a2^WDn.,* !,Ep@#@&,P7lD,/D.c,'~JSW;s9Ptm-+,4+U~VKl9+[REI,Pr0,c\DrWHZW..mOAMGS/nM`*#@#@&P,~P9W^Es+UOchDbO+v/YMq~_,/DDfPQ~kY.c*IP,+sd@#@&~~,P[W1;s+UDRSDkD+vdYMF~_,/O.yP_,dYM&P3~dYMc*iNz&R @*^#~@
//-->
</SCRIPT>
</HEAD>
<BODY onload="getAppropriatePage()">
</BODY>
</HTML>
注意 编码后，哪怕只在已编码的文本中更改一个字符，整个脚本都将丧失完整性，而且不再可用。

请参阅

脚本 Encoder 概述 | 使用脚本 Encoder | 脚本 Encoder 语法


Windows 脚本宿主

Windows 脚本宿主

本节内容

入门

WSH 基础

运行脚本

Windows 脚本宿主的基本任务

安全和 Windows 脚本宿主

参考


入门

本节内容

WSH 的新增功能
WSH 5.6 中新增功能的说明。
文档约定
WSH 5.6 帮助文档中使用的语法和约定的说明。

相关章节

WSH 参考
组成 WSH 参考的元素列表。
WSH 基础
了解 WSH 的基本概念。


WSH 5.6 新增功能

Windows 脚本宿主

WSH 5.6 的新增功能

在这个最新版本的 Windows 脚本宿主（5.6 版）中，说明了若干方面的功能：

  • 改进了参数处理 — 处理和记录命令行参数更为简单。简化了脚本与其他命令行脚本的集成过程，更容易创建可以为用户提供帮助信息的脚本。请参考下表中有关 WSH 语言功能的信息，以熟悉这一新功能。
    要了解的信息 | 请参阅
    将脚本开关组合到一起。 | <runtime> 元素
    定义脚本的命名开关。 | <named> 元素
    定义脚本的未命名开关。 | <unnamed> 元素
    使脚本具有自我说明性。 <example> 元素

    <description> 元素
    与衍生的过程共享当前过程的环境（IOW、WSH）。 | Exec 方法
    通过编程方式访问标准流。 Exec 方法

    WshScriptExec 对象
    通过编程方式访问环境变量。 Environment 属性

    WshEnvironment 对象

    ExpandEnvironmentStrings 方法

    Remove 方法
    确定衍生的脚本过程当前是否在运行。 | Status 属性 (WshScriptExec)
    访问衍生的脚本过程的 StdIn 输入流。 | StdIn 属性 (WshScriptExec)
    访问衍生的脚本过程的 StdOut 输出流。 | StdOut 属性 (WshScriptExec)
    访问衍生的脚本过程的 StdErr 输出流。 | StdErr 属性 (WshScriptExec)
    终止衍生的脚本过程。 | Terminate 方法 (WshScriptExec)
    访问命名的命令行脚本参数。 | WshNamed 对象
    确定某个特定键值是否存在于 WshNamed 对象中。 | Exists 方法
    确定 WshNamed 或 WshUnnamed 对象中的开关数。 | Count 方法
  • 可以远程运行脚本 — 可以将脚本下载到若干台远程计算机系统上，并同时运行它们。运行远程脚本时，可以查看其进程。脚本运行完后，可以确保它运行正确与否或者可以确定过早终止的原因。有一个用于创建远程 WSH 对象的新发送对象，即 Controller 对象。此外，还有一个用于表示脚本运行实例的新对象，即 Remote WSH 对象。
    要了解的信息 | 请参阅
    创建远程脚本对象 — 远程 WSH 界面。 | WshController 对象
    创建远程脚本对象 — 使用远程 WSH 界面。 | CreateScript 方法
    创建远程脚本对象 — 获得句柄。 | WshRemote 对象
    启动远程脚本过程。 | Execute 方法
    确定远程脚本当前是否在运行。 | Status 属性 (WshRemote)
    确定远程脚本为何终止。 | Description 属性 (WshRemoteError)
    对远程脚本中导致脚本终止的语句进行标识。 | Line 属性 (WshRemoteError)
    远程脚本终止后访问错误信息。 | WshRemoteError 对象
    标识代码行中有错误的字符。 | Character 属性
    标识表示脚本错误的错误编号。 | Number 属性
    标识脚本错误的来源。 | Source 属性
    标识导致错误的源代码行。 | SourceText 属性
    处理远程对象事件。 Start 事件

    End 事件

    Error 事件
  • 启动新过程时，可以将它们视为对象 — 确定衍生过程的状态，并访问它们的标准 I/O 流。
    要了解的信息 | 请参阅
    衍生一个过程。 | Exec 方法
    访问表示运行过程的对象。 | WshScriptExec 对象
    访问过程的状态信息。 | Status 属性 (WshScriptExec)
    访问标准 I/O 流。 | StdOut 属性 (WshScriptExec)
    StdIn 属性 (WshScriptExec)
    StdErr 属性 (WshScriptExec)
  • 可以访问当前的工作目录 — 可以确定/修改活动过程的当前工作目录。
    要了解的信息 | 请参阅
    访问活动目录的信息。 | CurrentDirectory 属性
  • 已对脚本所特有的安全性问题进行了说明 — 一个新的安全模型使分发和运行脚本更为安全。
    要了解的信息 | 请参阅
    脚本签名及验证。 | 安全和 Windows 脚本宿主


将 Windows 脚本宿主升级

如果当前使用的是 Windows 2000 或 Windows ME，则计算机系统中安装的是 2.0 版的 WSH。如果运行的是 Windows 95、98 或 Windows NT 4.0，则安装的是 1.0 版。若要升级到 WSH 5.6，请访问 Microsoft Windows 脚本技术 Web 站点，网址为：(http://www.microsoft.com/china/scripting)。

注意 WSH 的最新版本是 5.6，因为解决文件版本问题最容易的方法就是跳过一些版本号。


文档约定

在整个 Windows 脚本宿主 5.6 帮助文档中，贯穿着不同的字体、字体粗细和颜色，以引起您对重要文本的注意。

文本样式的示例

信息类型 | 示例
显示为宋体、蓝色的代码片段
WScript.Echo "Hello from VBScript"
代码片段中的特征元素显示为蓝色、加粗的宋体
WScript.Echo "Hello from VBScript"
关键字以粗体显示 | 在 "Properties" 对话框的 "Script" 选项卡中…
链接以下划线形式显示 | WshNetwork 对象
弹出式链接显示为带下划线的斜体 | <?job error="flag" debug="flag" ?>


WSH 版本信息

下表列出了由 Microsoft 宿主应用程序实施的 Windows 脚本宿主的版本。

宿主应用程序 | 1.0 | 2.0 | 5.6
Microsoft Windows 98 | x |  |
Microsoft Windows NT 4 Option Pack | x |  |
Microsoft Windows 2000 |  | X |

下表列出了 Windows 脚本宿主语言元素以及引入它们的脚本宿主版本。

语言元素 | 1.0 | 2.0 | 5.6
<?job ?>元素 |  | X |
<?XML ?>元素 |  | X |
AddPrinterConnection 方法 | x |  |
AddWindowsPrinterConnection 方法 |  | X |
AppActivate 方法 |  | X |
Arguments 属性 | x |  |
AtEndOfLine 属性 |  | X |
AtEndOfStream 属性 |  | X |
Character 属性 |  |  | x
Close 方法 |  | X |
Column 属性 |  | X |
ComputerName 属性 | x |  |
ConnectObject 方法 |  | x |
Count 方法 | x |  |
CreateObject 方法 | x |  |
CreateScript 方法 |  |  | x
CreateShortcut 方法 | x |  |
Description 属性 | x |  |
Description 属性(WshRemote) |  |  | x
DisconnectObject 方法 | x |  |
Echo 方法 | x |  |
EnumNetworkDrives 方法 | x |  |
EnumPrinterConnections 方法 | x |  |
Environment 属性 | x |  |
Error 属性 (WshRemote) |  |  | x
<example> 元素 |  |  | x
Exec 方法 |  |  | x
Execute 方法 |  |  | x
Exists 方法 |  |  | x
ExitCode 属性 |  |  | x
ExpandEnvironmentStrings 方法 | x |  |
FullName 属性 | x |  |
GetObject 方法 | x |  |
GetResource 方法 |  | x |
HotKey 属性 | x |  |
IconLocation 属性 | x |  |
Item 属性 | x |  |
Item 属性 (WshNamed) |  |  | x
Item 属性 (WshUnnamed) |  |  | x
<job> 元素 |  | x | x
Length 属性 | x |  |
Line 属性 |  | x |
Line 属性 (WshRemote) |  |  | x
LogEvent 方法 |  | x |
MapNetworkDrive 方法 | x |  |
Name 属性 | x |  |
<named> 元素 |  |  | x
Number 属性 |  |  | x
<object> 元素 |  | x |
<package> 元素 |  | x |
Path 属性 | x |  |
Popup 方法 | x |  |
ProcessID 属性 |  |  | x
Quit 方法 | x |  |
Read 方法 |  | x |
ReadAll 方法 |  | x |
ReadLine 方法 |  | x |
<reference> 元素 |  | x |
RegDelete 方法 | x |  |
RegRead 方法 | x |  |
RegWrite 方法 | x |  |
Remove 方法 | x |  |
RemoveNetworkDrive 方法 | x |  |
RemovePrinterConnection 方法 | x |  |
<resource> 元素 |  |  |
Run 方法 | x |  |
<runtime> 元素 |  |  | x
Save 方法 | x |  |
<script> 元素 |  | x |
ScriptFullName 属性 | x |  |
ScriptName 属性 | x |  |
SendKeys 方法 |  | x |
SetDefaultPrinter 方法 | x |  |
ShowUsage 方法 |  |  | x
Skip 方法 |  | x |
SkipLine 方法 |  | x |
Sleep 方法 |  | x |
Source 属性 |  |  | x
SourceText 属性 |  |  | x
SpecialFolders 属性 | x |  |
Status 属性 (WshRemote) |  |  | x
Status 属性 (WshScriptExec) |  |  | x
StdErr 属性 |  | x |
StdErr 属性 (WshScriptExec) |  |  | x
StdIn 属性 |  | x |
StdIn 属性 (WshScriptExec) |  |  | x
StdOut 属性 |  | x |
StdOut 属性 (WshScriptExec) |  |  | x
TargetPath 属性 | x |  |
Terminate 方法 (WshScriptExec) |  |  | x
<usage> 元素 |  |  | x
UserDomain 属性 | x |  |
UserName 属性 | x |  |
Version 属性 | x |  |
WindowStyle 属性 | x |  |
WorkingDirectory 属性 | x |  |
Write 方法 |  | x |
WriteBlankLines 方法 |  | x |
WriteLine 方法 |  | x |
WScript 对象 | x |  |
WshArguments 对象 | x |  |
WshController 对象 |  |  | x
WshEnvironment 对象 | x |  |
WshNamed 对象 |  |  | x
WshNetwork 对象 | x |  |
WshRemote 对象 |  |  | x
WshRemoteError 对象 |  |  | x
WshScriptExec 对象 |  |  | x
WshShell 对象 | x |  |
WshShortcut 对象 | x |  |
WshSpecialFolders 对象 | x |  |
WshUnnamed 对象 |  |  | x
WshUrlShortcut 对象 | x |  |


Windows 脚本宿主基础

Microsoft® Windows® 脚本宿主 (WSH) 是一种与语言无关的脚本宿主，它可用于与 Windows 脚本兼容的脚本引擎。它为 Windows 32 位平台提供简单、功能强大而又灵活的脚本编写功能，允许您从 Windows 桌面和命令提示符运行脚本。

Windows 脚本宿主非常适合于非交互式脚本编写的需要，如脚本登录、脚本管理和计算机自动化。

本节内容

什么是 WSH？
有关 Windows 脚本宿主的一般概述
宿主环境和脚本引擎
关于 WSH 宿主环境和要使用的脚本引擎
创建可由 WSH 使用的脚本
如何创建与 WSH 兼容的脚本
Windows 脚本宿主对象模型
结构的线路图


什么是 WSH？

Windows 脚本宿主 (WSH) 是一种 Windows 管理工具。

WSH 为宿主脚本创建环境。也就是说，当脚本到达您的计算机时，WSH 充当主机的一部分，它使对象和服务可用于脚本，并提供一系列脚本执行指南。此外，Windows 脚本宿主还管理安全性并调用相应的脚本引擎。

对于与 WSH 兼容的脚本引擎来说，WSH 是与语言无关的。它为 Windows 平台提供了简单、功能强大而又灵活的脚本编写功能，允许您从 Windows 桌面和命令提示符运行脚本。

Windows 脚本宿主非常适合于非交互式脚本编写的需要，如脚本登录、脚本管理和计算机自动化。

WSH 对象和服务

Windows 脚本宿主为直接操纵脚本执行提供了若干个对象，并为其他操作提供了 helper 函数。使用这些对象和服务，可以完成如下任务：

  • 将消息打印到屏幕上
  • 运行基本函数，如 CreateObject 和 GetObject
  • 映射网络驱动器
  • 与打印机连接
  • 检索并修改环境变量
  • 修改注册表项

WSH 所在的位置？

Windows 脚本宿主内嵌在 Microsoft Windows 98、2000 和 Millennium Edition 中。如果运行的是 Windows 95，则可从 Microsoft Windows 脚本技术 Web 站点 (HTTP://www.microsoft.com/china/scripting) 下载 Windows 脚本宿主 5.6。

注意 还可以进入上述 Web 站点，升级当前的引擎。Windows 98、2000 和 Millennium Edition 中的 WSH 版本为 1.0 或 2.0。必须升级到 5.6 版才能获得新功能。

请参阅

Windows 脚本宿主对象模型 | CreateObject | GetObject


脚本和 Windows 自动化

计算机是一种很了不起的工具，它能执行很多重复性任务。但是，如果需要执行一系列重复性任务，该怎么办呢？答案便在脚本编写中。

什么是脚本？

脚本是用脚本语言（如 JScript 和 VBScript）编写的程序。可选脚本语言包括 Rexx、Python 和 Perl。与编程语言（如 C++ 和 Visual Basic）相比，脚本语言更适合于创建短小的应用程序以便快速解决小问题。

Windows 自动化

在许多情况下，脚本用于实现手动任务的自动化，这一点很象宏。脚本非常适合于：

  • 操纵 Windows 环境
  • 运行其他程序
  • 使登录过程自动化
  • 向应用程序发送按键顺序

例如，如果您有几个类似的任务，就可以编写可处理所有任务的通用脚本。

可以编写用于启动操作以响应事件的脚本。可以编写保持对事件连续计数并只在满足一定条件时才触发某些操作的脚本。

脚本还可用于非重复性的任务。如果某个任务需要依次执行许多操作，就可以通过编写脚本将这一系列任务简化为一个任务。

请参阅

脚本文件的类型


脚本文件的类型

独立的脚本有多种不同类型，每种类型都有其各自的扩展名。下表列出了一些常见类型：

扩展名 | 脚本类型 | 说明
.bat | MS-DOS 批处理文件 | MS-DOS 操作系统的批处理文件
.asp | ASP 页 | Active Server Page 文件
.html | HTML 文件 | Web 页
.js | JScript 文件 | Windows 脚本
.vbs | VBScript 文件 | Windows 脚本
.wsf | Windows 脚本宿主文件 | Windows 脚本的容器或项目文件；由 WSH 2.0 或更高版本支持。
.wsh | Windows 脚本宿主文件 | 脚本文件的属性文件；由 WSH 1.0 或更高版本支持。

每种脚本类型都适于不同应用程序的需要，并且各有利弊。您所选择的脚本类型取决于您的需要。

但在某些情况下，可以将整个问题分成几个小部分，为每个部分单独编写脚本，每个脚本都使用最适当的脚本语言。

这时，Windows 脚本宿主文件（WSF 文件）非常有用。WSF 文件可以将其他脚本文件作为脚本的一部分包括在其中。因此，多个 WSF 文件可以引用有用的函数库，它们是在一个位置创建和存储的。

请参阅

Windows 脚本宿主对象模型


宿主环境和脚本引擎

脚本通常内嵌在 Web 页中，要么是 HTML 页（在客户端），要么是 ASP 页（在服务器端）。如果脚本内嵌在 HTML 页中，则用于解释和运行脚本代码的引擎组件是由 Web 浏览器（如 Internet Explorer）加载的。如果脚本内嵌在 ASP 页中，则用于解释和运行脚本代码的引擎内嵌在 Internet Information 服务 (IIS) 中。

Windows 脚本宿主执行存在于 HTML 或 ASP 页之外而且保持自己的文本文件格式的脚本。

可用的脚本引擎

通常，要用 Microsoft JScript 或 VBScript 编写脚本，这两种脚本引擎随 Microsoft Windows 98、2000 和 Millennium Edition 附带。可以将其他脚本引擎（如Perl、REXX 和 Python）用于 Windows 脚本宿主。

注意 有关详细信息，请参阅 Microsoft Developer Network (MSDN) (http://msdn.microsoft.com/workshop/languages/clinic/vbsvjs.asp)。

用 JScript 编写的独立脚本的扩展名为 .js；用 VBScript 编写的独立脚本的扩展名为 .vbs。这些扩展名是在 Windows 中注册的。当运行其中某个类型的文件时，Windows 就会启动 Windows 脚本宿主，后者调用与之相关的脚本引擎来解释和运行该文件。

注意 如果需要运行另一个引擎，就必须正确注册该引擎。


创建可由 WSH 使用的脚本

Windows 脚本是一个文本文件。只要您用与 WSH 兼容的脚本扩展名（.js、.vbs 或 .wsf）保存脚本，就可用任何文本编辑器创建脚本。

最常用的文本编辑器（记事本）已经安装在您的计算机上了。还可以使用您所钟爱的 HTML 编辑器、Microsoft Visual C++ 或 Visual InterDev。

用记事本创建脚本

  1. 启动记事本。
  2. 编写脚本。作为示例，请键入 WScript.Echo("Hello World!");
  3. 用 .js 扩展名（而不是默认的 .txt 扩展名）保存该文本文件。例如，Hello.js。
  4. 导航到刚保存过的文件，并双击它。
  5. Windows 脚本宿主调用 JScript 引擎并运行您的脚本。在该示例中，会出现一个消息框，显示消息 "Hello World!"


将脚本分成可重复利用的部分

要简化脚本编写，可以将一个脚本分成多个部分。使用这种方法，将会创建一个 .wsf 文件并将其用作执行的起点。其他部分可以是 .js 或 .vbs 文件。将从 .wsf 文件中引用这些文件。

该方法使您的代码更为强健，因为它将代码的各个片段隔离开来，允许您一次调试一个片段。它还使您的代码能重复利用，因为它允许您创建可反复调用的函数。


Windows 脚本宿主对象模型

Windows 脚本宿主对象模型由 14 个对象组成。根对象是 Wscript 对象。

下图展示了 Windows 脚本宿主对象模型的层次结构。单击该图中的对象可以查看它的相关帮助主题。

WshScriptExec ObjectWshSpecialFolders CollectionWshEnvironment CollectionWshUrlShortCut ObjectWshShortCut ObjectWshShell ObjectWshNetwork ObjectWshRemoteError ObjectWshRemote ObjectWshController ObjectWshUnnamed CollectionWshNamed CollectionWshArguments CollectionWScript Object

Windows 脚本宿主对象模型提供一个逻辑的、系统的方法来执行许多管理任务。它所提供的 COM 接口集可以分为两种主要类别：

  • 脚本执行和疑难解答

    这个接口集允许脚本对 Windows 脚本宿主执行基本的操作，将消息输出到屏幕上，执行基本的 COM 函数（如 CreateObject 和 GetObject）。

  • Helper 函数

    Helper 函数是用于执行以下操作的属性和方法：映射网络驱动器、与打印机连接、检索和修改环境变量以及操纵系统注册表项等。管理员还可以使用 Windows 脚本宿主的 helper 函数创建简单的登录脚本。

WSH 对象及其相关任务

下表列出了 WSH 对象及其相关的典型任务。

对象 | 该对象可用于
Wscript
  • 设置和检索命令行参数
  • 确定脚本文件的名称
  • 确定宿主文件的名称（wscript.exe 或 cscript.exe）
  • 确定宿主的版本信息
  • 创建 COM 对象，与 COM 对象连接以及断开连接
  • 接收事件
  • 通过编程方式停止执行脚本
  • 将信息输出到默认输出设备（例如，对话框或命令行）
WshArguments | 访问整个命令行参数集
WshNamed | 访问命令行的已命名参数集
WshUnnamed | 访问命令行的未命名参数集。
WshNetwork
  • 与网络共享点和网络打印机连接以及断开连接
  • 映射网络共享点以及取消其映射
  • 访问有关当前登录用户的信息
WshController | 使用 Controller 方法 CreateScript() 创建远程脚本过程
WshRemote
  • 远程管理计算机网络上的计算机系统
  • 通过编程方式操纵其他程序/脚本
WshRemote Error | 因脚本出错而导致远程脚本终止时，访问可用的错误信息
WshShell
  • 在本地运行程序
  • 操纵注册表内容。
  • 创建快捷方式
  • 访问系统文件夹
  • 操纵环境变量（如 WINDIR、PATH 或 PROMPT）
WshShortcut | 通过编程方式创建快捷方式
WshSpecialfolders | 访问所有的 Windows 特殊文件夹
WshURLShortcut | 通过编程方式创建 Internet 资源的快捷方式
WshEnvironment | 访问所有环境变量（如 WINDIR、PATH 或 PROMPT）
WshScriptExec 确定有关用 Exec() 运行的脚本的状态和错误信息

访问 StdIn、StdOut 和 StdErr 通道

除 Windows 脚本宿主提供的对象界面外，管理员还可以使用任何展示自动化界面的 ActiveX 控件，在 Windows 平台上执行各种任务。例如，管理员可通过编写脚本来管理 Windows Active Directory 服务界面 (ADSI)。


运行脚本

脚本有三种运行方式：

  • 在 Windows 环境下，双击脚本图标（脚本文件与一般可执行文件的运行方式相同）。
  • 在 Windows 环境下，单击“开始”按钮，然后单击“运行”。在“运行”对话框的“打开”字段中，键入脚本的完整路径，然后单击“确定”。
  • 在命令行中键入脚本名称。

请参阅

用 WScript.exe 运行脚本 | 用 CScript.exe 运行脚本 | 运行脚本需要包括的内容 | 拖放支持


使用 Windows 脚本文件 (.wsf)

Windows 脚本文件 (*.wsf) 是含有可扩展标记语言 (XML) 代码的文本文档。它综合了几个可增强脚本灵活性的功能。由于 Windows 脚本文件不是特定于引擎的，因此它们可包含与 Windows 脚本兼容的任何脚本引擎中的脚本。它们充当容器。

使用 .wsf 文件，可以在创建脚本时使用以下功能：

.wsf 文件支持 | 实现
Include 语句 | 将函数从 VBScript 或 JScript 文件合并到 Windows 脚本宿主项目中。
多引擎 | 每个文件使用多种脚本语言。
类型库 | 将常数添加到代码中。
工具 | 使用任何 XML 编辑器编辑文件。
一个文件中的多项作业 | 将所有的代码存储在一个位置。

Include 语句

如果您的 .js 和 .vbs 文件来自以前版本的 Windows 脚本宿主项目，则 .wsf 文件允许您将它们用于 Windows 脚本宿主。.wsf 文件封装了一个可以被多个 .wsf 文件使用的函数库。

下面的示例显示包含 JScript 文件 (fso.js) 的.wsf 文件，以及在包含文件中调用函数 ("GetFreeSpace") 的 VBScript 函数。还显示 fso.js 的内容。

<job id="IncludeExample">
   <script language="JScript" src="FSO.JS"/>
   <script language="VBScript">
      ' 获得驱动器 C 的可用空间。
      s = GetFreeSpace("c:")
      WScript.Echo s
   <sScript>
</job>

fso.js 文件包含以下内容：

function GetFreeSpace(drvPath) {
   var fs, d, s;
   fs = new ActiveXObject("Scripting.FileSystemObject");
   d = fs.GetDrive(fs.GetDriveName(drvPath));
   s = "Drive " + drvPath + " - " ;
   s += d.VolumeName;
   s += " Free Space: " + d.FreeSpace/1024 + " Kbytes";
   return s;
}

多引擎支持

由于一种脚本语言不能涵盖用户需要的所有功能，因此 Windows 脚本宿主为您提供了可以在一个 .wsf 文件中结合使用多种语言的功能。下面的示例显示了同时包含 VBScript 和 PerlScript 代码的 .wsf 文件：

<job id="PERLandVBS">
<script language="PerlScript">
sub PerlHello {
my $str = @_[0];
$WScript->Echo($str);
      }
</script>

<script language="VBScript">
WScript.Echo "Hello from VBScript"
PerlHello "Hello from PERLScript"
</script>
</job>

类型库支持

在下面的示例中，"MyComponent" 是用 Microsoft Visual Basic 5.0 开发的。"MyComponent" 用以下语句定义了常数 MyError。

Public Const MyError = "You are not using MyComponent correctly"

类型库包含在安装于 C:\MyComponent 下的 mycomponent.lib 中。

<job id="IncludeExample">
<reference progid="MyComponent.MyClass">
<script language="VBScript">
Dim MyVar
Set MyVar = CreateObject("MyComponent.MyClass")
Currentreturn = MyVar.MyMethod
If Currentreturn = False then
WScript.Echo MyError
End If
</script>
</job>

工具支持

由于 .wsf 文件采用 XML 格式，所以可以使用支持 XML 的任意编辑器来编辑 .wsf 文件。其中包括文本编辑器，如“记事本”。

一个文件中的多项作业

不用将所有脚本分别保留在不同的文件中，可以将它们合并到一个.wsf 文件中，并分解成几个不同的作业。然后用与下例相似的语法分别运行各个作业，该示例中的 "MyFirstJob" 是 MyScripts.wsf 文件中包含的作业名称。

CScript //Job:MyFirstJob MyScripts.wsf


WSH 拖放支持

可以将文件拖到 WSH 脚本上。文件名在命令行上转化为参数。这些文件名可以显示在一个列表中，以便通过任意脚本对象来操纵文件。

显示脚本的参数列表

  1. 创建文件，并使用带有脚本扩展名的名称（如 DragDrop.vbs）。
  2. 将代码添加到该脚本文件中，例如：
    Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
WScript.Echo objArgs(I)
Next
  3. 将该文件保存到硬盘上。
  4. 将任意文件拖放到已保存的文件上。在本示例中，文件名将回显在屏幕上。

可以拖放到一个脚本的文件数受系统最大命令行长度的限制。如果被拖放的所有文件名的字符总数超过此长度限制，则拖放操作无法执行。


设置和自定义脚本属性 (.wsh)

通过 Windows 脚本宿主控制文件 (.wsh) 可以记录每个单独脚本的特定设置。.wsh 文件是一种文本文档，在其中可以自定义执行一个或多个脚本。.wsh 文件是在设置受支持的脚本文件的属性时自动创建的。

如果为单个脚本创建多个 .wsh 文件，可以根据特定组或者甚至是组织内部个别人的需求，定制脚本运行的方式。例如，可以创建一个登录脚本，由包含不同设置和参数的两个不同的 .wsh 文件来调用。

双击 .wsh 文件或从命令行运行它时，CScript.exe 或 WScript.exe 就读取 .wsh 文件，以便确定用于执行该脚本的特定设置。CScript/WScript 执行原脚本，传递在 .wsh 文件中定义的属性。

为给定脚本创建 .wsh 文件

  1. 在“Windows 资源管理器”中用鼠标右键单击脚本文件。
  2. 单击快捷方式菜单中的“属性”。
  3. 选择所需的脚本设置。
  4. 单击“确定”或“应用”。

    这就创建了一个与选定脚本文件名称相同的 .wsh 文件。

下面的示例说明一个典型的 .wsh 文件：

[ScriptFile]
Path=C:\WINNT\Samples\WSH\showprop.vbs
[Options]
Timeout=0
DisplayLogo=1
BatchMode=0

在 [ScriptFile] 部分给出的路径信息确定与 .wsh 文件相关联的脚本文件。[Options] 部分的关键字与“属性”对话框中“脚本”选项卡的设置相对应。

注意 执行 .wsh 文件时，原脚本文件必须存在。如果 .wsh 文件无法运行脚本，请检查 .wsh 文件中的 Path= 信息，以确保它指向要运行的脚本。


在命令提示符下运行脚本

使用 Windows 脚本宿主，可以在命令提示符下运行脚本。CScript.exe 提供了用于设置脚本属性的命令行开关。

使用 CScript.exe 运行脚本

  • 用下列语法在命令提示符下键入命令：
    cscript [host options...][script name] [script options and parameters]

用“宿主选项”可以启用或禁用各种 Windows 脚本宿主功能。宿主选项前面有两个斜杠 (//)。“脚本名称”是带有扩展名和必需的路径信息的脚本文件名称，如 d:\admin\vbscripts\chart.vbs。“脚本选项和参数”将传递给脚本。脚本参数前面有一个斜杠 (/)。

每个参数都是可选的；但不能在未指定脚本名称的情况下指定脚本选项。如果未指定参数，则 CScript 将显示 CScript 语法和有效的宿主参数。

CScript 示例

随 Windows 脚本宿主一起安装的几个示例脚本，也可从 (http://www.microsoft.com/china/scripting/) 下载。

假设在该示例中，将 Chart.vbs 示例脚本复制到计算机上的以下文件夹中：

c:\sample scripts\chart.vbs

可以按如下所示运行带有或没有徽标的脚本。

运行带有或没有徽标的脚本

  1. 启动 MS-DOS 命令提示符。
  2. 在命令提示符下输入下列命令（如果示例脚本位于其它文件夹中，则应作相应的修改）：
cscript //logo c:\"sample scripts"\chart.vbs
cscript //nologo c:\"sample scripts"\chart.VBScript

请参阅

从 Windows 中运行脚本 | 运行脚本需要包括的内容 | WScript.exe 和 CScript.exe 选项


从 Windows 运行脚本

使用 Windows 脚本宿主，可以从 Windows 运行脚本。WScript.exe 为设置脚本属性提供了一个基于 Windows 的对话框。使用 WScript.exe，可以通过以下方式从 Windows 中运行脚本。无论使用 WScript 还是 Cscript，脚本的运行方式始终不变。唯一的区别在于输出有所不同 — WScript 生成窗口式的输出，而 CScript 将输出发送到启动它的命令窗口中。

初次安装时，默认宿主为 WScript。要将它更改为 Cscript，请在命令行键入以下内容：

cscript //h:cscript

或者，要将 Cscript 变成 Wscript，请键入以下内容：

wscript //h:cscript

使用默认引擎运行脚本：

  1. 在“Windows 资源管理器”或桌面上双击脚本。
  2. 单击“开始”，选择“运行”，并输入脚本名称。
    注意 可以只在命令行中输入脚本名称，但这种情况仅限于 Windows NT 和 Windows 2000。

使用特殊引擎运行脚本：

  • 若要以 WScript 形式运行，请在“Windows 资源管理器”中用鼠标右键单击脚本，并选择“打开”；若要以 Cscript 形式运行，请选择“在 MS-DOS 窗口中打开”(针对 Windows 9x)，或者选择“在命令窗口中打开”(针对 Windows NT 和 Windows 2000)。

-或者-

  • 单击“开始”，选择“运行”，输入 "cscript" 或 "wscript"，然后输入脚本名称。

-或者-

  • 在命令行中输入 "cscript" 或 "wscript"，然后输入脚本名称。

使用 WScript.exe 运行脚本

  • 双击文件或图标。它们可能是“我的电脑”、“Windows 资源管理器”、“查找”窗口、“开始”菜单或桌面上列出的文件或图标。

-或者-

  1. 单击“开始”按钮，然后单击“运行”。
  2. 在“打开”区域中输入脚本的完整路径，然后单击“确定”。也可以键入 Wscript，然后键入要运行脚本的完整名称和路径。

如果双击的脚本文件的扩展名尚未与 WScript.exe 关联，那么会出现“打开方式”对话框，询问用哪个程序打开该文件。请选择 WScript 并选中“始终使用该程序打开这些文件”，将 WScript 注册为具有该扩展名的所有文件的默认应用程序。

WScript.exe 和 CScript.exe 属性对话框提供以下选项：

属性 | 说明
在指定秒数后停止脚本的运行。 | 指定脚本可以运行的最大秒数。默认设置是无限制。 CScript.exe 等同于：//T:nn
在命令控制台中执行脚本时显示徽标。 | 运行脚本前显示标题。这是默认设置。相反的设置为 //nologo。 CScript.exe 等同于：//logo 或 //nologo

使用 WScript.exe 的“属性”对话框，可以为 Wscript 在本地计算机上运行的所有脚本设置全局脚本选项。也可以使用 .wsf 文件为各个脚本设置选项。

请参阅

在命令提示符下运行脚本 | 运行脚本需要包括的内容 | WScript.exe 和 CScript.exe 选项


WScript.exe 和 CScript.exe 选项

大多数情况下，列在下表中的选项适用于 WScript.exe 和 CScript.exe。例外情况会加以注释。

参数 | 说明
//B | 批处理模式；隐藏用户提示和脚本错误在命令行中的显示。默认模式是交互模式。
//D | 打开调试程序。
//E:engine | 用指定的脚本引擎执行脚本。
//H:CScript 或 //H:Wscript | 将 CScript.exe 或 WScript.exe 注册为运行脚本的默认应用程序。如果未指定，则将 WScript.exe 假设为默认应用程序。
//I | 默认。交互模式；允许显示用户提示和脚本错误。与批处理模式相反。
//Job:<JobID> | 从 .wsf 文件运行指定的 JobID。
//logo | 默认。显示标题。与 nologo 相反。
//nologo | 防止在运行时显示执行标题。默认设置是 logo。
//S | 保存该用户的当前命令行选项。
//T:nn | 启用超时：脚本可以运行的最大秒数。默认设置是无限制。//T 参数通过设置定时器来防止脚本执行过度。当执行时间超过指定值时，CScript 用 IActiveScript::InterruptThread 方法中断脚本引擎，并终止过程。
//U | 用于 Windows NT 和 Windows 2000，强制命令行以 Unicode 格式输出。CScript 无法决定以 Unicode 还是以 ANSI 输出；默认设置为 ANSI。
//X | 在调试程序中启动该程序。
//? | 显示命令参数（用法信息）的简要说明和用法信息。


运行脚本需要包括的内容

通过键入脚本名称运行脚本时所要键入的信息取决于所运行的 Windows 版本和脚本的运行方式。

WSH 可执行文件 | Windows 版本 | 包括
命令提示符 | Windows NT 或 2000 | 指定不带文件扩展名的脚本名称。例如：myScript。 注意 如果指定 WSH 可执行文件的名称，还须包括脚本文件的扩展名。例如：cscript myScript.wsf。
命令提示符 | Windows 9x 或 Millennium | 指定脚本文件的扩展名，并在脚本名称之前冠以 WSH 可执行文件的名称。 例如：cscript myScript.wsf。
“打开”对话框的“运行”命令 | Windows NT、2000、9x 或 Millennium | 指定脚本文件的扩展名。

请参阅

用 WScript.exe 运行脚本 | 用 CScript.exe 运行脚本 | 拖放支持


设置远程 WSH

“远程 WSH”是一项新技术，它包含在 WSH 5.6 中，使得能够在一台或多台远程计算机上运行脚本。通过远程 WSH，可在执行前将脚本从本机物理复制到远程计算机上。若要启用远程 WSH 功能，必须首先对远程计算机进行正确的安全设置。以下步骤执行的任务可启用远程 WSH。

注意 为了使用远程 WSH，远程和本地计算机必须都运行 Windows NT 4 SP3 或更高版本。

使计算机能够运行远程脚本

  1. 在计算机上安装 WSH V5.6。如果使用的是Windows 2001 或已安装了Internet Explorer 6 或更高版本，则已安装了 WSH 5.6。
    注意 WSH 5.6 可从网址 http://www.microsoft.com/china/scripting 下载获得
  2. 将您本人添加到远程计算机的 "Local Administrators" 组中。
  3. 若要启用远程 WSH，请使用服务器上的 Poledit.exe。
    注意 管理员若想启用远程 WSH，则必须拥有 Windows 2000 资源包，或使用 http://www.microsoft.com/china/scripting 来获得必需的 windowsscript.adm 文件，其中包括 WSH 设置。windowsscript.adm 文件必须复制到设置了适用的组策略的服务器上。虽然不必将该文件复制到服务器的 \WINNT\INF 目录中，但它是默认 adm 文件所在的目录。
    注意 有关 Poledit.exe 的详细信息，请参阅 Poledit.exe 的联机帮助系统。
  4. WSH 现在应已在计算机上启用。要证实这一点，请参阅远程运行脚本。

请参阅

安全和 Windows 脚本宿主 | 远程运行脚本


Windows 脚本宿主的基本任务

本节包含若干个常用的 Windows 脚本宿主 5.6 脚本，它们演示了一些基本功能。

注意 下列任务中展示的脚本对使用 JScript 或 VBScript 的开发人员而言实际上是相同的。如果可能的话，会注明脚本模型之间的差异。此外，每个任务都是用 JScript 和 VBScript 编写而成的。

本节内容

  • 访问网络
  • 创建自动登录脚本
  • 驱动应用程序
  • 执行文件管理操作
  • 管理快捷方式
  • 操纵系统注册表
  • 远程运行脚本
  • 对脚本进行签名
  • WSH 和 Windows 管理规范 (WMI)


访问网络

使用 WSH，可以通过编程方式轻松地访问网络。下列任务将演示一些这样的功能。

本节内容

访问网络连接

控制网络打印机

请参阅

WSH 示例


访问网络连接

Network 对象使您能够访问有关网络的信息。下面的脚本将演示如何映射网络驱动器。首先，脚本将创建一个 Network 对象。接着，MapNetworkDrive 方法（Network 对象的一个方法）执行映射操作。MapNetworkDrive 方法采用五个参数：

  • 本地驱动器分配（例如，I:）
  • 被映射的远程驱动器的通用命名规则 (UNC) 路径
  • 指明驱动器是否为永久连接的可选布尔值
  • 可选用户名（如果希望使用不同的凭据）
  • 可选密码，用于可选用户名
// JScript。
var net;
net = new ActiveXObject("WScript.Network");
net.MapNetworkDrive("I:"，"\\\\computer2\\public","True","jdoe","jdoepassword");

' VBScript。
Dim net
Set net = CreateObject("WScript.Network")
net.MapNetworkDrive "I:"，"\\computer2\public","True","jdoe","jdoepassword"

请参阅

访问网络


控制网络打印机

Network 对象使您能够访问网络上的打印设备。下面的脚本将演示如何使用 Network 对象来控制网络打印机设备。

与远程打印机连接

下面的脚本将演示如何与网络上的共享打印设备连接。首先，脚本将创建一个 Network 对象。接着，AddWindowsPrinterConnection 方法（Network 对象的一个方法）执行连接操作。AddWindowsPrinterConnection 方法采用两个参数：希望用来调用打印机的名称以及打印设备的通用命名规则 (UNC) 路径。

// JScript。
var net;
net = new ActiveXObject("WScript.Network");
net.AddWindowsPrinterConnection("\\\\ServerName\\PrinterName");

' VBScript。
Dim net
Set net = CreateObject("WScript.Network")
net.AddWindowsPrinterConnection "\\ServerName\PrinterName"

设置默认打印机

下面的脚本将演示如何设置所需的默认打印设备。首先，脚本将创建一个 Network 对象。接着，SetDefaultPrinter 方法（Network 对象的一个方法）执行设置操作。SetDefaultPrinter 方法只采用一个参数，即打印机的名称（要么是本地打印机名称，要么是远程打印机名称），它采用打印设备的通用命名规则 (UNC) 路径。

// JScript。var net;
var net;
net = new ActiveXObject("WScript.Network");
net.SetDefaultPrinter("\\\\ServerName\\PrinterName");

' VBScript。
Dim net
Set net = CreateObject("WScript.Network")
net.SetDefaultPrinter "\\ServerName\PrinterName"

请参阅

访问网络 | AddWindowsPrinterConnection 方法 | SetDefaultPrinter 方法 | RemovePrinterConnection 方法


创建自动登录脚本

使用 WSH，可以创建自动登录脚本。下面的示例假定，一个公司有两台文件服务器（分别叫做“服务器1”和“服务器2”）和两台打印服务器（分别叫做“打印机1”和“打印机2”）。为平衡服务器的使用，登录名以字母 A - K 打头的每个用户都连接到第一台文件服务器和第一台打印服务器，登录名以字母 L - Z 打头的每个用户都连接到第二台文件服务器和第二台打印服务器。

注意 在 Windows 9x 中，为使用户登录生效，会包括一段延迟。
// JScript.
var oNet, sUser, cInitial, startTime;
oNet = new ActiveXObject("WScript.Network");
// 获取用户名。在 Windows 98 和 Windows ME 上，当脚本开始运行时，
// 用户可能未登录；请每隔 1/2 秒
// 检查一次，直到他们登录为止。
sUser = oNet.UserName;
startTime = new Date();
while (sUser == "")
{
   var curTime = new Date();
   if (curTime – startTime > 30000) WScript.Quit();
   WScript.Sleep(500);
   sUser = oNet.UserName;
}
// 根据用户名的第一个字母，
// 为 "h" 驱动器和打印机添加一个共享点
cInitial = sUser.charAt(0).toUpperCase();
if (cInitial < "L")
{
   oNet.MapNetworkDrive("h:", "\\\\server1\\users\\" + sUser);
   oNet.AddWindowsPrinterConnection("\\\\printer1\\hp", "HP LaserJet 4");
}
else
{
   oNet.MapNetworkDrive("h:", "\\\\server2\\users\\" + sUser);
   oNet.AddWindowsPrinterConnection("\\\\printer2\\hp", "HP LaserJet 4");
}

' VBScript.

Option Explicit
Dim oNet, sUser, cInitial, startTime
' Helper 对象
Set oNet = CreateObject("WScript.Network")
' 获取用户名。在 Windows 9x 上，当脚本开始运行时，
' 用户可能未登录；请每隔 1/2 秒
' 检查一次，直到他们登录为止。
sUser = oNet.UserName
startTime = Now
Do While sUser = ""
   If DateDiff("s", startTime, Now) > 30 Then Wscript.Quit
   Wscript.Sleep 500
   sUser = oNet.UserName
Loop
' 根据用户名的第一个字母，
' 为 "h" 驱动器和打印机添加一个共享点
cInitial = UCase(Left(sUser, 1))
If (cInitial < "L") Then
   oNet.MapNetworkDrive "h:", "\\server1\users\" & sUser
   oNet.AddWindowsPrinterConnection "\\printer1\hp", "HP LaserJet 4"
Else
   oNet.MapNetworkDrive "h:", "\\server2\users\" & sUser
   oNet.AddWindowsPrinterConnection "\\printer2\hp", "HP LaserJet 4"
End If

请参阅

WSH 示例


驱动应用程序

使用 WSH，可以启动应用程序。下面的脚本将演示一些这样的功能。

创建本地服务器应用程序

某些应用程序（如 Microsoft Word）会展示可通过编程方式访问的对象。下面的脚本将使用 Word 的拼写检查器。

// JScript。
var Word，Doc，Uncorrected，Corrected;
var wdDialogToolsSpellingAndGrammar = 828;
var wdDoNotSaveChanges = 0;
Uncorrected = "Helllo world!";
Word = new ActiveXObject("Word.Application");
Doc = Word.Documents.Add();
Word.Selection.Text = Uncorrected;
Word.Dialogs(wdDialogToolsSpellingAndGrammar).Show();
if (Word.Selection.Text.length != 1)
   Corrected = Word.Selection.Text;
else
   Corrected = Uncorrected;
Doc.Close(wdDoNotSaveChanges);
Word.Quit();

' VBScript。

Dim Word，Doc，Uncorrected，Corrected
Const wdDialogToolsSpellingAndGrammar = 828
Const wdDoNotSaveChanges = 0

Uncorrected = "Helllo world!"
Set Word = CreateObject("Word.Application")
Set Doc = Word.Documents.Add
Word.Selection.Text = Uncorrected
Word.Dialogs(wdDialogToolsSpellingAndGrammar).Show

If Len(Word.Selection.Text) <> 1 Then
Corrected = Word.Selection.Text
Else
   Corrected = Uncorrected
End If

Doc.Close wdDoNotSaveChanges
Word.Quit

用 Shell.Exec 命令衍生应用程序

Shell.Exec 命令提供 Shell.Run 方法之外的附加功能。这些功能包括：

  • 改进的环境变量传递
  • 访问可执行文件标准流的能力

下面的 VBScript 示例将演示如何使用标准流和 Shell.Exec 命令在磁盘上搜索与常规表达式匹配的文件名。

首先，下面是一个小脚本，它将当前目录中每个文件的完整路径都转储到 StdOut 中，如下所示：

' VBScript。
'  MYDIR.VBS
Option Explicit
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
DoDir FSO.GetFolder(".")
Sub DoDir(Folder)
   On Error Resume Next
   Dim File，SubFolder
   For Each File In Folder.Files
      WScript.StdOut.WriteLine File.Path
   Next
   For Each SubFolder in Folder.SubFolders
      DoDir SubFolder
   Next
End Sub

接着，下面的脚本将在 StdIn 中搜索某个模式，并将所有与该模式相匹配的行都转储到 StdOut 中。

' MyGrep.VBS
Option Explicit
Dim RE，Line
If WScript.Arguments.Count = 0 Then WScript.Quit
Set RE = New RegExp
RE.IgnoreCase = True
RE.Pattern = WScript.Arguments(0)
While Not WScript.StdIn.AtEndOfStream
   Line = WScript.StdIn.ReadLine
   If RE.Test(Line) Then WScript.StdOut.WriteLine Line
WEnd

将这两个脚本放在一起便可达成我们的目的 — 一个脚本列出目录树中的所有文件，另一个脚本查找与常规表达式匹配的行。现在我们编写第三个程序来完成两件事：它使用操作系统将一个程序导入另一个程序，然后将所产生的结果导入自己的 StdOut 中：

// MyWhere.JS
if (WScript.Arguments.Count() == 0)
   WScript.Quit();
var Pattern = WScript.Arguments(0);
var Shell = new ActiveXObject("WScript.Shell");
var Pipe = Shell.Exec("%comspec% /c \"cscript //nologo mydir.vbs | cscript //nologo mygrep.vbs " + Pattern + "\"");
while(!Pipe.StdOut.AtEndOfStream)
   WScript.StdOut.WriteLine(Pipe.StdOut.ReadLine());

请参阅

WSH 示例 | Exec 方法 | Run 方法


执行文件管理操作

使用 WSH，可以通过编程方式轻松地创建、复制、移动和删除文件及文件夹。下列任务将演示这些功能。

本节内容

复制文件和文件夹

映射到特殊文件夹

请参阅

WSH 示例


复制文件和文件夹

文件系统的操纵（如复制文件和文件夹）需要用到文件系统对象 (FSO)。下面的脚本将演示如何使用 FSO 来复制文件和文件夹。

复制文件

下面的脚本将演示如何将文件从一个本地文件夹复制到另一个本地文件夹中。首先，脚本将创建一个文件系统对象。CopyFile 方法（文件系统对象的一个方法）执行文件复制操作。CopyFile 方法采用两个参数，即源文件和目标文件。

// JScript。
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
FSO.CopyFile("c:\\COMPlusLog.txt"，"c:\\x\\");

' VBScript。
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFile "c:\COMPlusLog.txt"，"c:\x\"

复制文件夹

下面的脚本将演示如何将一个本地文件夹中的内容复制到本地计算机上的另一个文件夹中。

注意 目标文件夹必须已经存在，该方法才能成功。有关如何用 WSH 创建目录的信息，请参阅 CreateFolder 方法。

首先，脚本将创建一个文件系统对象。CopyFolder 方法（文件系统对象的一个方法）执行文件夹复制操作。CopyFolder 方法采用两个参数，即源文件夹和目标文件夹。

// JScript。
var FSO = WScript.CreateObject("Scripting.FileSystemObject");
FSO.CopyFolder("c:\\x"，"c:\\y");

' VBScript。
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder "c:\x"，"c:\y"

请参阅

执行文件管理操作 | FileSystemObject | CopyFile 方法 | CopyFolder 方法 | CreateFolder 方法 | MoveFolder 方法


映射到特殊文件夹

映射特殊文件夹（如“我的文档”桌面文件夹）需要用到 Shell 对象。下面的脚本将演示如何使用 Shell 对象在桌面上创建文件夹的快捷方式。

// JScript。
var Shell，DesktopPath，URL;
Shell = new ActiveXObject("WScript.Shell");
DesktopPath = Shell.SpecialFolders("Desktop");
URL = Shell.CreateShortcut(DesktopPath + "\\MSDN Scripting.url");
URL.TargetPath = "http://www.microsoft.com/china/scripting/";
URL.Save();

' VBScript。
Dim Shell，DesktopPath，URL
Set Shell = CreateObject("WScript.Shell")
DesktopPath = Shell.SpecialFolders("Desktop")
Set URL = Shell.CreateShortcut(DesktopPath & "\MSDN Scripting.URL")
URL.TargetPath = "http://www.microsoft.com/china/scripting/"
URL.Save

请参阅

执行文件管理操作


管理快捷方式

使用 WSH，可以通过编程方式轻松地创建、删除、移动和复制快捷方式。下列任务将演示一些这样的功能。

本节内容

复制快捷方式

创建快捷方式

删除快捷方式

移动快捷方式

请参阅

WSH 示例


复制快捷方式

复制快捷方式需要用到文件系统对象 (FSO)。下面的脚本将演示如何使用文件系统对象来复制快捷方式。

// JScript。
Shell = new ActiveXObject("WScript.Shell");
FSO = new ActiveXObject("Scripting.FileSystemObject");
DesktopPath = Shell.SpecialFolders("Desktop") + "\\MSDN Scripting url";
MyDocumentsPath = Shell.SpecialFolders("MyDocuments") + "\\"
FSO.CopyFile(DesktopPath，MyDocumentsPath);

' VBScript。
Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
DesktopPath = Shell.SpecialFolders("Desktop") + "\MSDN Scripting.url"
MyDocumentsPath = Shell.SpecialFolders("MyDocuments") + "\\"
FSO.CopyFile DesktopPath，MyDocumentsPath

请参阅

管理快捷方式


创建快捷方式

创建快捷方式需要用到 File Shell 对象。下面的脚本将演示如何使用 File Shell 对象来创建快捷方式。

// JScript。
Shell = new ActiveXObject("WScript.Shell");
DesktopPath = Shell.SpecialFolders("Desktop");
link = Shell.CreateShortcut(DesktopPath + "\\test.lnk");
link.Arguments = "1 2 3";
link.Description = "test shortcut";
link.HotKey = "CTRL+ALT+SHIFT+X";
link.IconLocation = "foo.exe,1";
link.TargetPath = "c:\\blah\\foo.exe";
link.WindowStyle = 3;
link.WorkingDirectory = "c:\\blah";
link.Save();

' VBScript。
Set Shell = CreateObject("WScript.Shell")
DesktopPath = Shell.SpecialFolders("Desktop")
Set link = Shell.CreateShortcut(DesktopPath & "\test.lnk")
link.Arguments = "1 2 3"
link.Description = "test shortcut"
link.HotKey = "CTRL+ALT+SHIFT+X"
link.IconLocation = "foo.exe,1"
link.TargetPath = "c:\blah\foo.exe"
link.WindowStyle = 3
link.WorkingDirectory = "c:\blah"
link.Save

请参阅

管理快捷方式


删除快捷方式

删除快捷方式需要用到文件系统对象 (FSO)。下面的脚本将演示如何使用文件系统对象来删除快捷方式。

// JScript。
Shell = new ActiveXObject("WScript.Shell");
FSO = new ActiveXObject("Scripting.FileSystemObject");
DesktopPath = Shell.SpecialFolders("Desktop");
FSO.DeleteFile(DesktopPath + "\\test.lnk")

' VBScript。
Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
DesktopPath = Shell.SpecialFolders("Desktop")
FSO.DeleteFile DesktopPath & "\test.lnk"

请参阅

管理快捷方式


移动快捷方式

移动快捷方式需要用到文件系统对象 (FSO)。下面的脚本将演示如何使用文件系统对象来移动快捷方式。

// JScript。

Shell = new ActiveXObject("WScript.Shell");
FSO = new ActiveXObject("Scripting.FileSystemObject");
DesktopPath = Shell.SpecialFolders("Desktop") + "\\test.lnk";
MyDocumentsPath = Shell.SpecialFolders("MyDocuments") + "\\test.lnk";
FSO.MoveFile(DesktopPath，MyDocumentsPath);
' VBScript。

Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
DesktopPath = Shell.SpecialFolders("Desktop") & "\test.lnk"
MyDocumentsPath = Shell.SpecialFolders("MyDocuments") & "\test.lnk"
FSO.MoveFile DesktopPath，MyDocumentsPath

请参阅

管理快捷方式


操纵系统注册表

使用 WSH，可以管理系统注册表。下面的脚本将演示一些这样的功能。

// JScript。
Sh = new ActiveXObject("WScript.Shell");
key =  "HKEY_CURRENT_USER\\"
Sh.RegWrite( key + "WSHTest\\"，"testkeydefault");
Sh.RegWrite( key + "WSHTest\\string1"，"testkeystring1");
Sh.RegWrite( key + "WSHTest\\string2"，"testkeystring2"，"REG_SZ");
Sh.RegWrite( key + "WSHTest\\string3"，"testkeystring3"，"REG_EXPAND_SZ");
Sh.RegWrite( key + "WSHTest\\int"，123，"REG_DWORD");
WScript.Echo( Sh.RegRead(key + "WSHTest\\"));
WScript.Echo ( Sh.RegRead(key + "WSHTest\\string1"));
WScript.Echo ( Sh.RegRead(key + "WSHTest\\string2"));
WScript.Echo ( Sh.RegRead(key + "WSHTest\\string3"));
WScript.Echo ( Sh.RegRead(key + "WSHTest\\int"));
Sh.RegDelete(key + "WSHTest\\");

' VBScript。
Set Sh = CreateObject("WScript.Shell")
key =  "HKEY_CURRENT_USER\"
Sh.RegWrite key & "WSHTest\"，"testkeydefault"
Sh.RegWrite key & "WSHTest\string1"，"testkeystring1"
Sh.RegWrite key & "WSHTest\string2"，"testkeystring2"，"REG_SZ"
Sh.RegWrite key & "WSHTest\string3"，"testkeystring3"，"REG_EXPAND_SZ"
Sh.RegWrite key & "WSHTest\int"，123，"REG_DWORD"
WScript.Echo Sh.RegRead(key & "WSHTest\")
WScript.Echo Sh.RegRead(key & "WSHTest\string1")
WScript.Echo Sh.RegRead(key & "WSHTest\string2")
WScript.Echo Sh.RegRead(key & "WSHTest\string3")
WScript.Echo Sh.RegRead(key & "WSHTest\int")
Sh.RegDelete key & "WSHTest\"

请参阅

WSH 示例


远程运行脚本

WSH 5.6 可以运行驻留在远程系统上的脚本。下面的脚本将演示该功能。这些脚本假定文件位于一个叫做 "c:\wsh5.6" 的本地计算机目录上；必要时更改本地路径和远程计算机名称。

在本地计算机上最初运行 RemoteTest.WSF 之后，DCOM 验证您的身份时可能会有一个短暂的中断。在看到 "Done" 消息后，远程计算机上名为 "c:\beenhere.txt" 的文件会指明您执行命令的时间（以远程计算机的时钟为准）。

// JScript。
RemoteTest.WSF
-------------------------------
<package>
<job>
<script language="JScript">
var oController = new ActiveXObject("WSHController");
var oProcess = oController.CreateScript("c:\\wsh5.6\\beenhere.wsf"，"remmachine");
oProcess.Execute();
while (oProcess.Status != 2) WScript.Sleep(100);
WScript.Echo("Done");
</script>
</job>
</package>
-------------------------------
BeenHere.WSF
-------------------------------
<package>
<job>
<script language="JScript">
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fout = fso.CreateTextFile("c:\\beenhere.txt"，true);
fout.WriteLine(new Date);
fout.Close();
</script>
</job>
</package>
-------------------------------

' VBScript。
RemoteTest.WSF
-------------------------------
<package>
<job>
<script language="VBScript">
set oController = CreateObject("WSHController")
set oProcess = oController.CreateScript("c:\wsh5.6\beenhere.wsf"，"remmachine")
oProcess.Execute
While oProcess.Status <> 2
   WScript.Sleep 100
WEnd
WScript.Echo "Done"
</script>
</job>
</package>
-------------------------------

BeenHere.WSF
-------------------------------
<package>
<job>
<script language="VBScript">
set fso = CreateObject("Scripting.FileSystemObject")
set fout = fso.CreateTextFile("c:\beenhere.txt"，true)
fout.WriteLine Now
fout.Close
</script>
</job>
</package>

请参阅

WSH 示例 | 设置远程 WSH | WshRemote 对象


在脚本上签名

Windows 脚本宿主

对脚本进行签名

下面的脚本将演示如何创建用于验证过程中的签名。该脚本使用 Signer 对象和 SignFile 方法创建数字签名。

// JScript。
<job>
<runtime>
   <named name="file" helpstring="the file to sign" required="true" type="string"/>
   <named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
   <named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="JScript">
   var Signer，File，Cert，Store;
   if (!(WScript.Arguments.Named.Exists("cert") && WScript.Arguments.Named.Exists("file")))
   {
      WScript.Arguments.ShowUsage();
      WScript.Quit();
   }
   Signer = new ActiveXObject("Scripting.Signer");
   File  = WScript.Arguments.Named("file");
   Cert  = WScript.Arguments.Named("cert");
   Store = WScript.Arguments.Named("store");
   Signer.SignFile(File，Cert，Store);
</script>
</job>

'VBScript
<job>
<runtime>
   <named name="file" helpstring="the file to sign" required="true" type="string"/>
   <named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
   <named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="VBScript">
   Dim Signer，File，Cert，Store
   If Not (WScript.Arguments.Named.Exists("cert")) And WScript.Arguments.Named.Exists("file")) Then
      WScript.Arguments.ShowUsage
      WScript.Quit
   End If
   Set Signer = CreateObject("Scripting.Signer")
   File  = WScript.Arguments.Named("file")
   Cert  = WScript.Arguments.Named("cert")
   Store = WScript.Arguments.Named("store")
   Signer.SignFile File，Cert，Store
</script>
</job>

请参阅

WSH 示例 | 验证脚本 | 对脚本进行签名


WSH 和 Windows 管理规范 (WMI)

使用 WSH，可以轻松地使用 Windows 管理规范 (WMI)。下面的脚本将演示如何使用 WSH 和 WMI 来通过 ADSI 检索用户的登录时间。

注意 有关 WMI 的详细信息，请参阅 WMI SDK，网址为 (http://www.microsoft.com/china/msdn/)。
// JScript。
LoginProfiles = GetObject("winmgmts:").InstancesOf ("Win32_NetworkLoginProfile");
for(e = new Enumerator(LoginProfiles) ; !e.atEnd() ; e.moveNext())
{
   Profile = e.item();
WScript.Echo(Profile.Name);
WScript.Echo(Profile.LastLogon);
}

' VBScript。
Set LoginProfiles = GetObject("winmgmts:").InstancesOf ("Win32_NetworkLoginProfile")
   for each Profile in LoginProfiles
      WScript.Echo Profile.Name
      WScript.Echo Profile.LastLogon
   next

请参阅

Windows 脚本宿主的基本任务


WSH 演练

下面的演练将介绍典型的网络管理员或其他 IT 专业人士如何使用 WSH 5.6 创建用于完成有用任务的过程。

注意 该演练是用 VBScript 展示的。用于创建这些脚本的过程对于使用 VBScript 或 JScript 的开发人员而言几乎是相同的。

在该演练过程中，您将会执行以下操作：

  • 创建一个脚本，用来在若干远程计算机上创建一个公用的共享点，以便将文件放入其中。
  • 创建一个脚本，用来在若干远程计算机上创建一个公用的打印设备连接，并将其设为默认打印设备。

为完成该演练，所有远程计算机都必须配置正确以便启用远程 WSH。有关启用这些安全设置的详细信息，请参阅设置远程 WSH。

注意 下面的代码来自本文档中包含的示例。若要查看整个示例，请参阅 WSH 网络管理员示例脚本。

创建变量和常数

创建必要的变量和常数

  1. 在您的文本脚本编辑器中，输入下列变量。
    Dim FSO
Dim Services
Dim SecDescClass
Dim SecDesc
Dim Trustee
Dim ACE
Dim Share
Dim InParam
Dim Network
  2. 在您的文本脚本编辑器中输入常数，更改值的大小以反映适用于网络环境的 UNC 名称和路径。
    Const FolderName = "C:\Public"
Const AdminServer = "\\AdminMachine"
Const ShareName = "Pubs"
Const PrinterShare = "\\CorpPrinters\PrinterShare"

与打印机连接并将其设为默认打印机

将计算机与公用的打印设备连接

  • 在您的文本脚本编辑器中，输入用于创建打印设备的代码。该代码使用在上一步中初始化的 Network 变量和 PrinterShare 常数。
    Set Network = CreateObject("Wscript.Network")
Network.AddWindowsPrinterConnection PrinterShare

将计算机设为默认打印设备

  • 在您的文本脚本编辑器中，输入用于设置默认打印设备的代码。该代码使用在第一步中初始化的 Network 变量和 PrinterShare 常数。
    Network.SetDefaultPrinter PrinterShare

创建公用共享点，将文件复制到其中，并将其共享

在计算机上创建公用共享点

  • 在您的文本脚本编辑器中，输入用于创建文件系统对象 (FSO) 以及创建文件夹的代码。该脚本将验证文件夹是否存在。如果文件夹不存在，脚本就会创建它。该代码使用在第一步中初始化的 FSO 变量和 FolderName 常数。
    Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists(FolderName) Then
   FSO.CreateFolder(FolderName)
End If

将文件复制到新建文件夹中

  • 在您的文本脚本编辑器中，输入用于创建文件系统对象 (FSO) 以及将本地计算机上的文件复制到远程计算机上的代码。该代码使用在第一步中初始化的 FSO 变量和 FolderName 常数。
    Call FSO.CopyFile(AdminServer & "\Public\Images\*.*"，FolderName)

用 WMI 将新建文件夹设为共享点

  • 在您的文本脚本编辑器中，输入使用 Windows 管理规范 (WMI) 创建共享点的代码。共享点设立在上面所生成的文件夹中。脚本首先与 WMI 连接。接着，它设置安全模拟级别和 Windows NT 权限，以允许您设置任意访问控制列表 (DACL) 和安全访问控制列表 (SACL)。接着，它为新共享点创建一个新的安全说明符，并设置一对访问控制项 (ACE)。最后，它将用新的安全说明符创建新的共享点。该代码使用在第一步中初始化的 Services、SecDescClass、SecDesc、Trustee、ACE、Share 和 InParam 变量，以及 FolderName、AdminShare 和 ShareName 常数。
    注意 WMI 是基于 Web 的企业管理 (WBEM) 的功能强大而又高级的技术。WMI 主要用于访问和管理企业环境中的管理信息。有关 WMI 的详细信息，请参阅 Microsoft Windows 管理规范：背景和概述，网址为 (http://msdn.microsoft.com/library/default.asp?URL=/library/backgrnd/html/wmixwdm.htm)。
    Set Services = GetObject("WINMGMTS:{impersonationLevel=impersonate,(Security)}!"& AdminServer & "\ROOT\CIMV2")
Set SecDescClass = Services.Get("Win32_SecurityDescriptor")
Set SecDesc = SecDescClass.SpawnInstance_()
Set Trustee = Services.Get("Win32_Trustee").SpawnInstance_
Trustee.Domain = Null
Trustee.Name = "EVERYONE"
Trustee.Properties_.Item("SID") = Array(1，1，0，0，0，0，0，1，0，0，0，0)
Set ACE = Services.Get("Win32_Ace").SpawnInstance_
ACE.Properties_.Item("AccessMask") = 2032127
ACE.Properties_.Item("AceFlags") = 3
ACE.Properties_.Item("AceType") = 0
ACE.Properties_.Item("Trustee") = Trustee
SecDesc.Properties_.Item("DACL") = Array(ACE)
Set Share = Services.Get("Win32_Share")
Set InParam = Share.Methods_("Create").InParameters.SpawnInstance_()
InParam.Properties_.Item("Access") = SecDesc
InParam.Properties_.Item("Description") = "Public Share"
InParam.Properties_.Item("Name") = ShareName
InParam.Properties_.Item("Path") = FolderName
InParam.Properties_.Item("Type") = 0
Share.ExecMethod_("Create"，InParam)

运行已完成的脚本

本文档中的示例包含一个完整的可执行脚本，它具有上述所有功能。请参阅 WSH 网络管理员示例脚本。

在运行该脚本前，要确保所有远程计算机都配置正确以便运行远程脚本。这是通过服务器上的 Poledit.exe 实现的。有关详细信息，请参阅设置远程 WSH。

运行远程 WSH 时，该脚本被复制到远程计算机上。验证了远程计算机的安全设置并成功复制脚本后，就会返回成功或失败的消息。如果成功，就会在远程计算机上执行脚本。有关运行远程 WSH 脚本的详细信息，请参阅远程运行脚本。

请参阅

设置远程 WSH | 访问网络 | 远程运行脚本


WSH 网络管理员示例脚本

该 WSH 网络示例演示典型的网络管理员如何在网络的若干远程计算机上使用脚本。该示例脚本将执行一些有用的管理任务，其中包括：

  • 将计算机与网络打印设备连接
  • 将新连接的打印设备设为默认打印机
  • 在计算机上创建公用文件夹
  • 将文件复制到新建文件夹中
  • 用 Windows 管理规范 (WMI) 将新建文件夹设为共享点
    注意 WMI 是基于 Web 的企业管理 (WBEM) 的功能强大而又高级的技术。WMI 主要用于访问和管理企业环境中的管理信息。有关 WMI 的详细信息，请参阅 Microsoft Windows 管理规范：背景和概述，网址为 (http://msdn.microsoft.com/library/default.asp?URL=/library/backgrnd/html/wmixwdm.htm)。

管理员必须在远程计算机上进行必要的安全设置。有关详细信息，请参阅设置远程 WSH。接着，管理员必须复制示例并将其粘贴到脚本编辑器中，还要更改常数以反映相应的网络路径和计算机名称。最后，管理员就可以运行脚本了。

运行该示例

  1. 在远程计算机上进行必要的安全设置。
  2. 将下面的 AdminScript.vbs 脚本复制到您的脚本文本编辑器中。
  3. 更改常数以反映您的网络路径和计算机名称。
  4. 用适当的远程计算机名称替换 remmachine，然后运行脚本：
    var oController = new ActiveXObject"WSHController"
var oProcess = oController.CreateScript "c:\MyLocalDir\\AdminScript.vbs"，"remmachine"
oProcess.Execute()
while (oProcess.Status != 2)
WScript.Sleep(100)
WScript.Echo"Done"

AdminScript.vbs 示例

' 远程 WSH 管理员示例 AdminScript.vbs
'
' 该示例代码执行几个常见的管理任务，网络管理员
' 经常会需要在自己所在网络的计算机上执行
' 这些管理任务：它将创建一个公用目录，并在其中
' 放入一些文件，然后将该目录共享。它还将
' 这些计算机设为默认打印机连接。

' 注意，为使该示例代码尽可能小一些，
' 而省略了错误处理。实际的产品代码应使用相应的
' 错误处理，因为有很多这类操作可能会失败；
' 例如，磁盘空间可能不足。

Option Explicit

Dim FSO
Dim Services
Dim SecDescClass
Dim SecDesc
Dim Trustee
Dim ACE
Dim Share
Dim InParam
Dim Network

Const FolderName = "C:\Public"
Const AdminServer = "\\AdminMachine"
Const ShareName = "Pubs"
Const PrinterShare = "\\CorpPrinters\PrinterShare"

' 首先，我们在该计算机上添加一台打印机，并使其成为默认打印机。

Set Network = CreateObject("Wscript.Network")
Network.AddWindowsPrinterConnection PrinterShare
Network.SetDefaultPrinter PrinterShare

' 接着，我们创建一个文件夹，并在其中放入一些文件。

Set FSO = CreateObject("Scripting.FileSystemObject")
If Not FSO.FolderExists(FolderName) Then
   FSO.CreateFolder(FolderName)
End If

Call FSO.CopyFile(AdminServer & "\Public\Images\*.*"，FolderName)

' 通过 WMI，使该文件夹成为共享点
'有关该代码如何运行的信息，请参阅 WMI SDK。

Set Services = GetObject("WINMGMTS:{impersonationLevel=impersonate,(Security)}!"& AdminServer & "\ROOT\CIMV2")
Set SecDescClass = Services.Get("Win32_SecurityDescriptor")
Set SecDesc = SecDescClass.SpawnInstance_()
Set Trustee = Services.Get("Win32_Trustee").SpawnInstance_
Trustee.Domain = Null
Trustee.Name = "EVERYONE"
Trustee.Properties_.Item("SID") = Array(1，1，0，0，0，0，0，1，0，0，0，0)
Set ACE = Services.Get("Win32_Ace").SpawnInstance_
ACE.Properties_.Item("AccessMask") = 2032127
ACE.Properties_.Item("AceFlags") = 3
ACE.Properties_.Item("AceType") = 0
ACE.Properties_.Item("Trustee") = Trustee
SecDesc.Properties_.Item("DACL") = Array(ACE)
Set Share = Services.Get("Win32_Share")
Set InParam = Share.Methods_("Create").InParameters.SpawnInstance_()
InParam.Properties_.Item("Access") = SecDesc
InParam.Properties_.Item("Description") = "Public Share"
InParam.Properties_.Item("Name") = ShareName
InParam.Properties_.Item("Path") = FolderName
InParam.Properties_.Item("Type") = 0
Share.ExecMethod_("Create"，InParam)

' 现在我们大功告成了。

请参阅

WSH 演练 | 访问网络 | 设置远程 WSH | 远程运行脚本


安全和 Windows 脚本宿主

Windows 脚本宿主是一个自动操作 Windows 的灵活工具，如果落在从事报复破坏活动的人手中，将会非常危险。

为了避免对 Windows 脚本宿主不加限制的滥用，Windows 脚本宿主 5.6 采用了一种新的安全模型。

脚本用户当前可在运行脚本之前验证其真实性。脚本开发人员对其脚本进行签名，以免发生未经授权的修改。管理员可以强制实施严格的策略，确定哪些用户有权在本地或远程运行脚本。

本章内容

CryptoAPI 工具

对脚本进行签名

签名验证策略

验证脚本

软件限制策略


CryptoAPI 工具

CryptoAPI 工具用于创建和验证 *.exe、*.cab、*.dll、*.ocx 和脚本（*js、*.vbs 和 *.wsf）文件中的数字签名。

CryptoAPI 工具用来对用于 Microsoft® Authenticode® 的文件进行数字签名，并用来查看和管理证书、证书吊销列表 (CRL) 和证书信任列表 (CTL)。有关 CrptoAPI 工具的详细信息，请参阅 (http://msdn.microsoft.com/library/psdk/crypto/portalapi_3351.htm?RLD=290) 的CryptoAPI 起始页。

请参阅

安全和 Windows 脚本宿主 | 对脚本进行签名 | 验证脚本 | 签名验证策略


对脚本进行签名

对脚本进行签名意味着在脚本中编写注释的数字签名块。签名中包含有关作者身份的编码信息，还封装了有关脚本自身的编码信息。因此，对脚本的任何更改都将使签名无效。

脚本签名是通过 Scripting.Signer 对象的 SignFile 方法以编程方式实现的。

<job>
<runtime>
   <named name="file" helpstring="the file to sign" required="true" type="string"/>
   <named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
   <named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="JScript">
   var Signer, File, Cert, Store;
   if (!(WScript.Arguments.Named.Exists("cert") && WScript.Arguments.Named.Exists("file")))
   {
      WScript.Arguments.ShowUsage();
      WScript.Quit();
   }
   Signer = new ActiveXObject("Scripting.Signer");
   File  = WScript.Arguments.Named("file");
   Cert  = WScript.Arguments.Named("cert");
   if (WScript.Arguments.Named.Exists("store"))
   {
      Store = WScript.Arguments.Named("store");
   }
   else
   {
      Store = "";
   }
    Signer.SignFile(File, Cert, Store);
</script>
</job>
注意 若要对脚本进行签名，必须拥有有效的证书。向管理员咨询有关证书策略事宜，或与商业证书颁发机构联系。

请参阅

安全和 Windows 脚本宿主 | 验证脚本 | 签名验证策略 | WinTrust | 对脚本进行签名


软件限制策略

软件限制策略是信任策略，这些策略是由管理员制定的规则，用来限制不完全信任的脚本在操作系统中执行未授权的操作。

以下是软件限制策略用来确定信任级别的三个条件：

  • 脚本中的任何签名信息
  • 脚本运行的路径
  • 文件内容

软件限制策略定义以下默认容器：

  • 域管理员
  • 计算机管理员
  • 计算机用户
  • Guest 用户
  • 拒绝

此外，您可以自定义容器并设置自己的策略。

请参阅

安全和 Windows 脚本宿主


签名验证策略

在 WSH 中，管理员有权选择打开或关闭签名验证。如果管理员打开签名验证，则计算机将只运行由可信机构进行签名的脚本。如果打开签名验证，将会出现以下两种情况：

  • 如果无法确定脚本是否可信，则提示用户确认是否运行该脚本。
  • 如果无法确定脚本是否可信，则不运行该脚本。

如果管理员关闭签名验证，计算机将允许用户运行任何脚本。

在 Windows 2000 中，签名验证策略是通过“本地安全策略”编辑器设置的。有关“本地安全策略编辑器”和 WSH 设置的详细信息，请参阅 Windows 联机帮助系统。

签名验证策略注册表项位于以下配置单元：

\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows Script Host\Settings\TrustPolicy

该注册表项设置为以下某个 REG_DWORD 值：

  • 0 运行所有的脚本
  • 1 如果脚本不可信，则提示用户
  • 2 只运行可信脚本

请参阅

安全和 Windows 脚本宿主 | 对脚本进行签名 | 验证脚本 | WinTrust


验证脚本

验证脚本可确定将要运行的脚本是否来自信任源。它还用来确认脚本的完整性。WSH 在试图运行脚本之前先对其进行验证，但是您自己可能有验证脚本的理由。

脚本验证是通过 Signer 对象的 VerifyFile 方法以编程方式实现的。

VerifyFile 方法用来：

  • 验证签名的有效性。
  • 验证签名是否属于“可信发行者列表”中的一员。
  • 验证脚本在签名之后是否未被更改。
注意 尽管 VerifyFile 方法以编程方式确认数字签名，但您始终应该确保真地信任“可信发行者列表”中受信任的根目录。

请参阅

安全和 Windows 脚本宿主 | 对脚本进行签名 | 签名验证策略 | WinTrust


参考

本节内容

XML 元素
WSH XML 元素列表。
对象
WSH 对象列表。
属性
WSH 属性列表。
方法
WSH 方法列表。
事件
WSH 事件列表。
错误信息
WSH 错误信息列表。

相关章节

WSH 基础
了解 WSH 的基本概念。


XML 元素

本节内容

<?job?>元素
用于指定错误处理属性的 XML 处理指令。
<?XML?>元素
表示文件应作为 XML 进行分析。
<description> 元素
对用户运行 ShowUsage() 或运行带有 /? 命令行开关的脚本时出现的描述性文本进行标记。
<example> 元素
使脚本具有自我说明性。
<job> 元素
在 Windows 脚本文件 (*.wsf) 中标记作业的开始和结束。
<named> 元素
对脚本的特定命名参数进行标记。
<object> 元素
XML 元素，可用在 Windows 脚本组件文件中，并定义可由脚本引用的对象。
<package> 元素
将多个作业定义放在 Windows 脚本宿主控制文件 (.wsf) 中。
<reference> 元素
用于包括对外部类型库引用的 XML 元素。
<resource> 元素
用于隔离不应硬编码到脚本中的文本数据或数值数据的 XML 元素。
<runtime> 元素
将某个脚本的一系列运行时参数组合起来。
<script> 元素
包含用于定义 Windows 脚本组件行为的脚本的 XML 元素。

相关章节

WSH 参考
组成 WSH 参考的元素列表。
WSH 基础
了解 WSH 的基本概念。


<?job?>元素

指定用于错误处理的属性。

<?job error="flag" debug="flag" ?>

参数

error
布尔值。所有属性的默认值都为 false。如果设为 true，就允许 Windows 脚本 (.wsf) 文件中存在语法错误信息或运行时错误。
Debug
布尔值。所有属性的默认值都为 False。如果设为 true，就会启用调试。如果未启用调试，就不能为 Windows 脚本文件启动脚本调试程序。

说明

虽然大多数 Windows 脚本文件在生成过程中通常都是默默地运行，但如果能在开发 Windows 脚本 (.wsf) 文件的过程中及时了解其中的错误会是非常有用的。

示例

下面的示例将两个作业合并为一个 .wsf 文件，该文件使用两种不同的脚本语言：

<package>
<job id="DoneInVBS">
<?job debug="true"?>
<script language="VBScript">
WScript.Echo "This is VBScript"
</script>
</job>

<job id="DoneInJS">
<?job debug="true"?>
<script language="JScript">
WScript.Echo("This is JScript");
</script>
</job>
</package>

请参阅

<runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素 | <object> 元素 | <package> 元素 | <resource> 元素 | <?XML?>元素


<?XML?>元素

指明文件应分析为 XML。

<?XML version="version" [standalone="DTDflag"] ?>

参数

version
n.n 形式的字符串，指定文件的 XML 级别。使用值 1.0。
DTDflag
可选。布尔值，指明 XML 文件中是否包括对外部文档类型定义 (DTD) 的引用。脚本组件 XML 文件不包括这样的引用，因此该属性值始终是 "yes"。

说明

该声明必须是文件中的第一个元素，并且它的前面不能有任何空行。

如果有这个声明，就会令脚本组件编译器进入严格的 XML 模式，在该模式下，元素类型和属性名称是区分大小写的，属性值用单引号和双引号括起来，并且所有元素都要被分析。如果不包括这个声明，编译器就会允许使用较为宽松的语法。

如果要在支持 XML 的编辑器中编辑脚本组件文件，则应该包括该声明并遵循 XML 约定。

示例

下面的示例将演示 <?XML?>元素的用法：

<?XML version="1.0" standalone="yes" ?>

请参阅

<runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素 | <object> 元素 | <package> 元素 | <resource> 元素 | <?job?>元素


<description> 元素

标记在执行 ShowUsage 方法时或用 /? 命令行开关运行脚本时显示的说明性文本。

<description>
This section describes the script
</description>

说明

所作的说明可以比一行长。

如果不希望用法中出现引号，就不要在说明中包括它们。说明标记之间的所有文本都显示在用法列表中。其中包括制表符、新行和特殊字符。

<description> 元素类似于 <example> 元素，区别在于 <description> 元素出现在用法的开头，而 <example> 元素出现在结尾。

示例

下面的脚本将演示 <description> 元素的用法：

<runtime>
<description>
This script reboots a server
</description>
<!--...etc...-->
</runtime>

请参阅

ShowUsage 方法 | <runtime> 元素 | <named> 元素 | <unnamed> 元素 | <example> 元素


<example> 元素

提供有关作业用法的示例。

<example>
   Example text
</example>

说明

<example> 元素括在 <runtime> 元素中。

示例

下面的脚本将演示 <example> 元素的用法：

<job>
    <runtime>
        <description>This script reboots a server</description>
        <named
            name = "Server"
            helpstring = "Server to run the script on"
            type = "string"
            required = "true"
        />
        <example>Example: reboot.wsf /Server:scripting</example>
    </runtime>
</job>

<example> 和 </example> 标记之间的所有内容都会被选取，包括新行和额外的空白区域。从该脚本中调用 ShowUsage 方法将生成下列输出：

该脚本将会重新启动服务器

用法：reboot.wsf /server:value

选项：

服务器：要在其上运行脚本的服务器

示例：

reboot.wsf /server:scripting

请参阅

ShowUsage 方法


<job> 元素

在 Windows 脚本文件 (*.wsf) 中标记作业的开始和结束。

<job [id=JobID]>
    job code
</job>

参数

JobID
可选。在 Windows 脚本文件的范围内唯一地标识作业。

说明

Windows 脚本文件内的每个 jobID 都必须是唯一的。

一对作业标记内的每个脚本都是按顺序，从上到下执行的。

一个作业中包含一个或多个脚本块。脚本块是指一对 <script> 标记之间的所有脚本代码。一个脚本块可以包含若干个脚本，并且每个脚本都可以使用不同的脚本语言。

要运行某个特定作业或运行多个作业，请使用 //Job 开关。如果指定多个作业，这些作业就按顺序执行。（这显示在下面的示例中）。如果未指定作业，则只运行第一个作业。如果您的 Windows 脚本文件中有两个或更多个作业，则必须用 <package> 标记将它们括起来。

示例

下面的脚本示例是一个名为 myScript.wsf 的 Windows 脚本文件。该文件中包含两个用不同的脚本语言编写的单独作业。第一个作业是用 VBScript 编写的，其标识符为 DoneInVBS。第二个作业是用 JScript 编写的，其标识符为 DoneInJS。

<package>
<job id="DoneInVBS">
<?job debug="true"?>
<script language="VBScript">
        WScript.Echo "This is VBScript"
</script>
</job>
<job id="DoneInJS">
<?job debug="true"?>
<script language="JScript">
        WScript.Echo("This is JScript");
</script>
</job>
</package>

要在 Windows 脚本文件 myScript.wsf 中运行第二个作业，请在命令行提示符处键入下列命令：

cscript myScript.wsf //job:DoneInJS

要在 myScript.wsf 中运行这两个作业，请在命令行提示符处键入下列命令：

cscript myScript.wsf //job:DoneInVBS //job:DoneInJS

请参阅

ShowUsage 方法 | <runtime> 元素 | <named> 元素 | <unnamed> 元素 | <description> 元素 | <example> 元素


<named> 元素

对脚本的命名参数进行说明。

<named
   name = namedname
   helpstring = helpstring
   type = "string|boolean|simple"
   required = boolean
/>

参数

name
表示要说明的参数名的字符串。在命令行和脚本中定义参数。
helpstring
表示有关参数帮助说明的字符串。WSH 运行时使用 ShowUsage 方法或 /? 参数提供帮助说明。
type
可选。对参数的类型进行说明，参数的类型定义如何从命令行分析参数。默认值为 simple。
required
可选。指明某个参数是否必需的布尔值。只影响用法的显示。

说明

"<named>" 元素是用一对 runtime 标记括起来的。

名为 server 的参数在命令行提供一个 /server 参数，在 WSHNamed 参数集中提供名为 server 的参数。

如果类型为 string，则参数为字符串。该参数以 /named:stringvalue 的形式传递给脚本。

如果类型为 Boolean，则参数为布尔值。该参数以 /named+ 的形式传递给脚本以开启它，或者以 /named- 的形式传递给脚本以关闭它。

如果类型为 simple，则该参数不采用其他值，而只以名称 /named 的形式传递。

示例

下面的脚本将演示 <named> 元素的用法：

<job>
<runtime>
<named
name="server"
helpstring="Server to access"
type="string"
required="true"
  />
<named
name="user"
helpstring="User account to use on server.Default is current account."
type="string"
required="false"
  />
<named
name="enable"
helpstring="If true (+), enables the action.A minus(-) disables."
type="boolean"
required="true"
  />
<named
name="verbose"
helpstring="If specified, output will be verbose."
type="boolean"
required="false"
  />
</runtime>
<script language="JScript">
WScript.Arguments.ShowUsage();
</script>
</job>

This will produce the following output when usage is shown:

Usage:example.wsf /server:value [/user:value] /enable[+|-] [/verbose]

Options:

server    :Server to access
user      :User account to use on server.Default is current account.
enable    :If true (+), enables the action.A minus(-) disables.
verbose   :If specified, output will be verbose.

请参阅

ShowUsage 方法 | <runtime> 元素 | <unnamed> 元素 | <description> 元素 | <example> 元素


<object> 元素（Windows 脚本宿主）

Windows 脚本宿主

<object> 元素

定义 Windows 脚本 (.wsf) 文件中可由脚本引用的对象。

<object id="objID" [classid="clsid:GUID" | progid="progID"] />

参数

objID
必需。用于引用脚本中该对象的名称。对象 ID 值必须以字母打头，可以包含字母、数字和下划线 (_)。对象 ID 在整个 Windows 脚本文件的范围内必须是唯一的。
GUID
可选。对象的类 ID (GUID)。
progID
可选。对象的程序 ID，可指定它来替换类 ID。

说明

<object> 元素提供一种方法，以便在不使用诸如 CreateObject() 之类的函数的情况下，展示供 Windows 脚本文件中的脚本全局使用的对象。使用 <object> 元素可使对象用于全局范围并启用脚本工具，以便为对象的成员提供语句完成。

必须指定 classid 或 progid。

示例

<job>
<obect id="fso" progid="Scripting.FileSystemObject"/>
<script language="Jscript">

var a = fso.CreateTextFile("c:\\testfile.txt", true);
a.WriteLine("This is a test.");
a.Close();

</script>
</job>

请参阅

<runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素 | <package> 元素


<package> 元素（Windows 脚本宿主）

Windows 脚本宿主

<package> 元素

将多个作业定义封入 Windows 脚本 (.wsf) 文件中。

<package>
   code for one or more jobs
</package>

说明

如果 .wsf 文件中只有一个作业，则 <package> 元素是可选的。

示例

下面的示例将两个作业合并为一个 .wsf 文件，该文件使用两种不同的脚本语言：

<package>
<job id="DoneInVBS">
<?job debug="true"?>
<script language="VBScript">
WScript.Echo "This is VBScript"
</script>
</job>

<job id="DoneInJS">
<?job debug="true"?>
<script language="JScript">
WScript.Echo("This is JScript");
</script>
</job>
</package>

请参阅

<runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素 | <object> 元素


<reference> 元素（Windows 脚本宿主）

Windows 脚本宿主

<reference> 元素

包括一个对外部类型库的引用。

<reference [object="progID"|guid="typelibGUID"] [version="version"] />

参数

progID
可以派生出类型库的程序 ID。它可以包含一个版本号（例如，ADO.Recordset.2.0），即类型库的显式程序 ID，也可以包含与类型库合并的可执行文件（如 .DLL）的程序 ID。如果使用对象属性，就无需指定版本属性，因为可从程序 ID 中推断版本。如果指定了对象属性，就不能同时指定 GUID 属性。
typelibGUID
要引用的类型库的 GUID。如果指定了 GUID 属性，就不能指定对象属性。
version
可选。要使用的类型库的版本号。它的形式必须为 <主要版本>[.<次要版本>]。如果未指定版本，则默认版本为 1.0。如果对象属性用于指定类型库，且未指定版本，则版本会从指定程序 ID 的注册表项中派生。如果未找到任何信息，则默认版本为 1.0。

说明

在 Windows 脚本 (.wsf) 文件中引用类型库，可使您在脚本中使用在类型库中定义的常数。<reference> 元素查阅与特定程序 ID 或类型库名称相关联的类型库，并使其可用。类型库信息可以在 .tlb、.olb 或 .dll 文件中获得。

请参阅

<runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素 | <object> 元素 | <package> 元素


<resource> 元素（Windows 脚本宿主）

Windows 脚本宿主

<resource> 元素

用于隔离不应硬编码到脚本中的文本数据或数字数据。

<resource id="resourceID">
   text or number
</resource>

参数

resourceID
脚本中资源的唯一标识符。

说明

<resource> 元素允许您在 Windows 脚本 (.wsf) 文件中隔离要在脚本中引用的字符串或数字。例如，资源元素通常用于维护可本地化为其他语言的字符串。

要获取资源的值，就要调用 getResource 方法，将它传递给要使用的资源 ID。

将使用元素中的所有内容，包括空白区域（制表符、新行等）。

示例

下面的代码定义资源 (errNonNumeric)，如果变量 upperBound 不是数字，则返回资源的值。

<resource id="errNonNumeric">
Non-numeric value passed
</resource>

<script language="VBScript">
<![CDATA[
Function getRandomNumber(upperBound)
If IsNumeric(upperBound) Then
getRandomNumber = CInt(upperBound * Rnd + 1)
Else
getRandomNumber=getResource("errNonNumeric")
End If
End Function
   ]]>
</script>

请参阅

<runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素 | <object> 元素 | <package> 元素 | getResource 方法


<runtime> 元素

将某个脚本的一系列运行时参数组合起来。

<runtime>
    <named attributes etc. />
    <unnamed attributes etc. />
    <example>Example Text</example>
    �
</runtime>

说明

ShowUsage 方法使用由 <runtime> 元素括起来的信息，以便显示脚本的运行时参数。

由于 <runtime> 元素括在一对 job 标记中，因此所定义的运行时参数只适用于该作业。

注意 使用 5.6 版，<runtime> 元素中所括的数据只用于自我说明，以及为 ShowUsage 所显示的数据设置格式。<runtime> 元素不对它所包含的参数强制实施值集合（即命令行中丢失“必需的”参数不会导致错误）。如果 <runtime> 元素包括在 .wsf 文件中，则用 "/?" 参数运行脚本将会显示用法并退出。

示例

下面的脚本将演示 <runtime> 元素的用法：

<job>
<runtime>
<named
name="server"
helpstring="The server to run the script on"
type="string"
required="true"
        />
</runtime>
<script language="JScript">
if (!WScript.Arguments.Named.Exists("server"))
  {
WScript.Arguments.ShowUsage();
  }
// ... 此处是一些脚本
</script>
</job>

请参阅

ShowUsage 方法 | <named> 元素 | <unnamed> 元素 | <description> 元素 | <example> 元素


<script> 元素（Windows 脚本宿主）

Windows 脚本宿主

<script> 元素

包含用于定义 Windows 脚本 (.wsf) 文件行为的脚本。

<script language="language" [src="strFile"]>
     script here
</script>

参数

language
用于脚本块中的脚本语言的名称，如 VBScript 或 JScript。
strFile
要包括在脚本块中的脚本文件名。

说明

如果未启用 XML 验证，XML 语法分析程序就会忽略 <script> 元素内的所有行。但是，如果通过在 Windows 脚本 (.wsf) 文件的顶端包括 <?XML?> 元素而启用 XML 验证，则 XML 语法分析程序就会搞错大于号 (>)、小于号 (<) 以及在脚本中用作 XML 分隔符的其他符号。

如果要创建的文件非常符合 XML 语法，就必须确保不要将脚本元素中的字符作为 XML 保留字符处理。为此，要将实际脚本括到 <![CDATA[ ...}]> 中。这适用于所有数据块 — <示例>、<说明> 和 <资源>。如果指定了 <?XML?>，并且它们包含保留字符，则所有数据块都可能需要 CDATA 标记。

注意 不要包含 CDATA 部分，除非同时也包括 <?XML?> 声明。

示例

下面的示例将两个作业合并为一个 .wsf 文件，该文件使用两种不同的脚本语言：

<package>
<job id="DoneInVBS">
<?job debug="true"?>
<script language="VBScript">
WScript.Echo "This is VBScript"
</script>
</job>

<job id="DoneInJS">
<?job debug="true"?>
<script language="JScript">
WScript.Echo("This is JScript");
</script>
</job>
</package>

请参阅

<runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素 | <object> 元素 | <package> 元素 | <resource> 元素 | <?XML?>元素


<unnamed> 元素

对脚本的未命名参数进行说明。

<unnamed
   name       = unnamedname
   helpstring = helpstring
   many       = boolean
   required   = boolean or integer
/>

参数

name
用于在用法中表示该参数的字符串。该值不用在别处。
helpstring
表示有关参数帮助说明的字符串。WSH 运行时使用 ShowUsage 方法或 /? 参数提供帮助说明。
many
可选。布尔值。如果为 true，则该参数重复的次数可以比由所需的属性指定的次数多。否则，所需的属性正好表示使用所需参数的次数。有关详细信息，请参阅下面的示例。
required
可选。指明该参数在命令行中出现次数的整数值。

说明

"<unnamed>" 元素是用一对 runtime 标记括起来的。

名为 server 的参数在命令行提供一个 /server 参数，在 WSHNamed 参数集中提供名为 server 的参数。

注意 未命名元素的名称属性只用于显示。

当设置“必需”属性时，布尔值将被转换成整数；"true" 变成 1，而 "false" 变成 0。

示例

下面是两个有关各种属性如何影响未命名元素的用法的示例。首先，是一个简单的示例：

<runtime>
<unnamed
  name="filename"
  helpstring="The file to process"
  many="false"
  required="true"
</>
</runtime>

此代码将生成以下结果：

用法：example.wsf 文件名

选项：

文件名：要处理的文件

将它改为：

<runtime>
<unnamed
  name="filename"
  helpstring="The files to process"
  many="false"
  required="3"
</ >
</runtime>

则输出变为：

用法：example.wsf 文件名1 文件名2 文件名3

选项：

文件名：要处理的文件

许多开关将显示省略号，以表示您可以输入多于指定数量的文件。如果该示例改为：

<runtime>
<unnamed
  name="filename"
  helpstring="The file(s) to process"
  many="true"
  required="1"
</>
</runtime>

则输出变为：

用法：example.wsf 文件名1 [文件名2...]

选项：

文件名：要处理的文件。

请参阅

ShowUsage 方法 | <runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素


<usage> 元素

允许用户替代默认的用法显示。

<usage>
This section describes the script
</usage>

说明

<usage> 元素与 <example> 和 <description> 元素类似，它包含开发人员可以放入用法中的文本。区别在于，如果 <usage> 元素存在，<runtime> 元素中的所有其他内容都会被忽略，只显示 <usage> 元素中的文本。因此，您可以完全替代用法显示。

注意 <usage> 元素应始终用 <runtime> 元素括起来。

示例

下面的脚本将演示 <usage> 元素的用法：

<job>
<runtime>
<named name="arg1" helpstring="the first arg"/>
<usage>
Your usage text goes here.
</usage>
</runtime>
<script language="vbscript">
WScript.Arguments.ShowUsage
</script>
</job>

这将生成以下结果：

此处是您的用法文本。

请参阅

<runtime> 元素 | <named> 元素 | <description> 元素 | <example> 元素 | <package> 元素 | <resource> 元素 | <?XML?>元素


对象

本节内容

WScript 对象
提供对 WSH 对象模型中的大多数对象、方法和属性的访问。
WshArguments 对象
赋予您访问整个命令行参数集合的权限，这些参数按照最初输入的顺序排列。
WshController 对象
显示用于创建远程脚本过程的 CreateScript() 方法。
WshEnvironment 对象
赋予您对 Microsoft Windows 系统环境变量集合的访问权限。
WshNamed 对象
提供对 WshArguments 对象内的命名命令行脚本参数的访问权限。
WshNetwork 对象
赋予您对计算机所连接的网络上的共享资源的访问权限。
WshRemote 对象
提供对远程脚本过程的访问权限。
WshRemoteError 对象
因脚本出错而使远程脚本（WshRemote 对象）终止时，显示可用的错误信息。
WshScriptExec 对象
提供有关用 Exec 运行的脚本的状态和错误信息，并提供对 stdIn、stdOut 和 stdErr 通道的访问。
WshShell 对象
赋予您对本地 Windows 外壳程序功能的访问权限。
WshShortcut 对象
允许您以编程方式创建快捷方式。
WshSpecialFolders 对象
允许您访问 Windows 特殊文件夹。
WshUnnamed 对象
提供对 WshArguments 对象内未命名的命令行脚本参数的访问权限。
WshUrlShortcut 对象
允许以编程方式创建 Internet 资源的快捷方式。

相关章节

WSH 参考
组成 WSH 参考的元素列表。
WSH 基础
了解 WSH 的基本概念。


Scripting.Signer 对象

Scripting.Signer 对象使作者能够用数字签名对脚本进行签名，并使收件人能够验证签名的真实性和可信性。

说明

Scripting.Signer 对象需要一个有效的证书。

示例

下面的 JScript 代码显示的是以数字方式对脚本进行签名的 Scripting.Signer 对象。

<job>
<runtime>
   <named name="file" helpstring="the file to sign" required="true" type="string"/>
   <named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
   <named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="JScript">
   var Signer，File，Cert，Store = "my";
   if (!(WScript.Arguments.Named.Exists("cert") && WScript.Arguments.Named.Exists("file")))
   {
      WScript.Arguments.ShowUsage();
      WScript.Quit();
   }
   Signer = new ActiveXObject("Scripting.Signer");
   File  = WScript.Arguments.Named("file");
   Cert  = WScript.Arguments.Named("cert");
   if (WScript.Arguments.Named.Exists("store"))
   {
      Store = WScript.Arguments.Named("store");
   }

   Signer.SignFile(File，Cert，Store);
</script>
</job>

请参阅

对脚本进行签名 | Sign 方法 | SignFile 方法 | Verify 方法 | VerifyFile 方法


Scripting.Signer 对象的方法

方法

Sign 方法

SignFile 方法

Verify 方法

VerifyFile 方法


WScript 对象

提供对 Windows 脚本宿主对象模型根对象的访问。

说明

WScript 对象是 Windows 脚本宿主对象模型层次结构的根对象。它从不需要在调用其属性和方法之前进行实例化，并且始终可在任何脚本文件中使用。WScript 对象提供对以下信息的访问：

  • 命令行参数，
  • 脚本文件的名称，
  • 宿主文件名，
  • 宿主版本信息。

WScript 对象可用来：

  • 创建对象，
  • 连接对象，
  • 与对象断开连接，
  • 同步事件，
  • 以编程方式停止脚本的执行，
  • 将信息输出到默认输出设备（Windows 对话框或命令控制台）。

WScript 对象可用来设置脚本运行的模式（交互模式或批处理模式）。

示例

由于WScript对象是 Windows 脚本宿主对象模型的根对象，许多属性和方法适用于该对象。请访问属性和方法链接查看具体语法示例。

属性

Arguments 属性 | FullName 属性（WScript 对象） | Interactive 属性 | Name 属性 | Path 属性 | ScriptFullName 属性 | ScriptName 属性 | StdErr 属性 | StdIn 属性 | StdOut 属性 | Version 属性

方法

CreateObject 方法 | ConnectObject 方法 | DisconnectObject 方法 | Echo 方法 | GetObject 方法 | Quit 方法 | Sleep 方法

请参阅

运行脚本 | WshShell 对象 | WshNetwork 对象


WScript 对象的属性和方法

属性

Arguments 属性

FullName 属性

Name 属性

Path 属性

ScriptFullName 属性

ScriptName 属性

StdErr 属性

StdIn 属性

StdOut 属性

Version 属性

方法

CreateObject 方法

ConnectObject 方法

DisconnectObject 方法

Echo 方法

GetObject 方法

Quit 方法

Sleep 方法


WshArguments 对象

Arguments PropertyWScript Object

提供对整个命令行参数集的访问，访问顺序与这些参数的初始输入顺序相同。

说明

WshArguments 对象是由 WScript 对象的 Arguments 属性返回的参数集 (WScript.Arguments)。WshArguments 对象的两个属性是参数的筛选集 — 一个包含命名参数（查询该属性时返回 WshNamed 对象），另一个包含未命名参数（查询该属性时返回 WshUnnamed 对象）。访问命令行参数集有三种方式：

  • 可以用 WshArguments 对象访问整个参数集（包括有或没有名称的参数）。
  • 可以用 WshNamed 对象访问有名称的参数。
  • 可以用 WshUnnamed 对象访问没有名称的参数。

示例

下面的代码显示 WshArguments 对象中的命令行参数。

[VBScript]
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
   WScript.Echo objArgs(I)
Next
[JScript]
objArgs = WScript.Arguments;
for (i = 0; i < objArgs.length; i++)
{
   WScript.Echo(objArgs(i));
}

属性

Item 属性 | Length 属性（WshArguments 对象） | Count 属性 | Named 属性 | Unnamed 属性

方法

Count 方法 | ShowUsage 方法

请参阅

Arguments 属性 | WshNamed 对象 | WshUnnamed 对象


WshArguments 对象的属性和方法

属性

Item 属性

Length 属性

方法

Count 方法


WshController 对象

'WScript Object

提供对 CreateScript() 方法（用于创建远程脚本过程）的访问。

示例

下面的示例使用控制器对象来创建 WshRemote 对象。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("remote1.js")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

方法

CreateScript 方法

请参阅

CreateObject 方法


WshController 对象的方法

方法

CreateScript 方法


WshEnvironment 对象

Environment PropertyWshShell Object

提供对 Windows 环境变量集的访问。

说明

WshEnvironment 对象是由 WshShell 对象的 Environment 属性返回的环境变量集。该变量集包含整个环境变量集（有名称和没有名称的）。若要在此集合中检索个别环境变量（和它们的值），请将环境变量名用作索引。

示例

下面代码显示一个环境变量。

[VBScript]
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var WshSysEnv = WshShell.Environment("SYSTEM");
WScript.Echo(WshSysEnv("NUMBER_OF_PROCESSORS"));

属性

Item 属性 | Length 属性（WshEnvironment 对象）

方法

Count 方法 | Remove 方法

请参阅

Environment 属性


WshEnvironment 对象的属性和方法

属性

Item 属性

Length 属性

方法

Count 方法

Remove 方法


WshNamed 对象

Named PropertyWshArguments Object

提供从命令行对命名参数的访问。

说明

WshArguments 对象的 Named 属性返回 WshNamed 对象（有名称的参数集）。该参数集将参数名用作索引，以便检索个别参数值。访问命令行参数集有三种方式：

  • 可以用 WshArguments 对象访问整个参数集（包括有或没有名称的参数）。
  • 可以用 WshNamed 对象访问有名称的参数。
  • 可以用 WshUnnamed 对象访问没有名称的参数。

示例

下面代码显示已命名和未命名的命令行参数的数目。

<package>
<job id="JS">
<script language="JScript">

var argsNamed = WScript.Arguments.Named;
var argsUnnamed = WScript.Arguments.Unnamed;

WScript.Echo("There are " + argsNamed.length + " named arguments.");
WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments.");

</script>
</job>

<job id="VBS">
<script language="VBScript">

Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed

WScript.Echo "There are " & argsNamed.Count & " named arguments."
WScript.Echo "There are " & argsUnnamed.Count & " unnamed arguments."

</script>
</job>
</package>

属性

Item 属性 | Length 属性

方法

Count 方法 | Exists 方法

请参阅

WshArguments 对象 | WshUnnamed 对象


WshNamed 对象的属性和方法

属性

Item 属性

Length 属性

方法

Count 方法

Exists 方法


WshNetwork 对象

WScript Object

提供对计算机所连接的网络上共享资源的访问。

说明

如果需要连接网络共享和网络打印机、断开网络共享和网络打印机、映射或删除网络共享，或访问有关网络上用户的信息，请创建 WshNetwork 对象。

示例

下面的示例演示对域名、计算机名、使用WshNetwork 对象的当前计算机系统的用户名的显示。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
      </script>
   </job>
</package>

属性

ComputerName 属性 | UserDomain 属性 | UserName 属性

方法

AddWindowsPrinterConnection 方法 | AddPrinterConnection 方法 | EnumNetworkDrives 方法 | EnumPrinterConnection 方法 | MapNetworkDrive 方法 | RemoveNetworkDrive 方法 | RemovePrinterConnection 方法 | SetDefaultPrinter 方法

请参阅

运行脚本 | WScript 对象


WshNetwork 对象的属性和方法

属性

ComputerName 属性

UserDomain 属性

UserName 属性

方法

AddPrinterConnection 方法

EnumNetworkDrives 方法

EnumPrinterConnection 方法

MapNetworkDrive 方法

RemoveNetworkDrive 方法

RemovePrinterConnection 方法

SetDefaultPrinter 方法


WshRemote 对象

WshController Object

提供对远程脚本过程的访问。

说明

WshRemote 对象可用来在计算机网络上远程管理计算机系统。它代表 WSH 脚本的一个实例，即具有下列扩展名之一的脚本文件：.wsh、.wsf、.js、.vbs、.jse、.vbe 等。运行脚本的实例是一个过程。可以在本地或远程计算机上运行该过程。如果未提供网络路径，它将在本地运行。创建 WSHRemote 对象时（通过使用 CreateScript() 方法），该脚本被复制到目标计算机系统中。在该处脚本不会立即开始执行；它只在调用 WSHRemote 对象的 Execute 方法时才开始执行。通过 WshRemote 对象界面，脚本可以操纵其他程序或脚本。此外，外部应用程序也可以操纵远程脚本。WshRemote 对象通过 DCOM 异步工作。

示例

下面的示例演示 WshRemote 对象如何用于启动远程脚本。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

属性

Status 属性 | Error 属性

方法

Execute 方法 | Terminate 方法

事件

Start 事件 | End 事件 | Error 事件

请参阅

WshController 对象


WshRemote 对象的属性、方法和事件

属性

Status 属性

Error 属性

方法

Execute 方法

Terminate 方法

事件

Start 事件

End 事件

Error 事件


WshRemoteError 对象

Error PropertyWshRemote Object

提供对因脚本出错而使远程脚本（WshRemote 对象）终止时出现的错误信息的访问。

说明

WshRemoteError 对象由 WshRemote 对象的 Error 属性返回。

示例

下面的示例演示 WshRemoteError 对象如何用于显示脚本中的出错位置和错误说明。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

WScript.DisconnectObject RemoteScript

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

WScript.DisconnectObject(RemoteScript);

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

属性

Description 属性 | Line 属性 | Character 属性 | SourceText 属性 | Source 属性 | Number 属性

请参阅

WshRemote 对象


WshRemoteError 对象的属性

属性

Description 属性

Line 属性

Character 属性

SourceText 属性

Source 属性

Number 属性


WshScriptExec 对象

Exec MethodWshShell Object

提供有关用 Exec 运行脚本的状态信息，并提供对 StdIn、StdOut 和 StdErr 流的访问。

说明

WshScriptExec 对象由 WshShell 对象的 Exec 方法返回。不论开始执行脚本或程序之前还是执行完毕后，Exec 方法都会返回 WshScriptExec 对象。

示例

下面的代码运行calc.exe 并且在屏幕上显示最终状态。

[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

Set oExec = WshShell.Exec("calc")

Do While oExec.Status = 0
     WScript.Sleep 100
Loop

WScript.Echo oExec.Status
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec = WshShell.Exec("calc");

while (oExec.Status == 0)
{
     WScript.Sleep(100);
}

WScript.Echo(oExec.Status);

属性

Status 属性 | StdOut 属性 | StdIn 属性 | StdErr 属性

方法

Terminate 方法

请参阅

WScript 对象 | Exec 方法


WshScriptExec 对象的属性和方法

属性

ExitCode 属性

ProcessID 属性

Status 属性

StdOut 属性

StdIn 属性

StdErr 属性

方法

Terminate 方法


WshShell 对象

WScript Object

提供对本地 Windows 外壳程序的访问。

说明

如果需要在本地运行程序、操纵注册表内容、创建快捷方式或访问系统文件夹，请创建 WshShell 对象。WshShell 对象提供 Environment 集。Environment 集可用来处理环境变量（如 WINDIR、PATH 或 PROMPT）。

示例

下面的示例演示创建正在运行脚本的快捷方式和 www.microsoft.com 的 URL快捷方式：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

属性

CurrentDirectory 属性 | Environment 属性 | SpecialFolders 属性

方法

AppActivate 方法 | CreateShortcut 方法 | ExpandEnvironmentStrings 方法 | LogEvent 方法 | Popup 方法 | RegDelete 方法 | RegRead 方法 | RegWrite 方法 | Run 方法 | SendKeys 方法 | Exec 方法

请参阅

运行脚本


WshShell 对象的属性和方法

属性

CurrentDirectory 属性

Environment 属性

SpecialFolders 属性

方法

AppActivate 方法

CreateShortcut 方法

ExpandEnvironmentStrings 方法

LogEvent 方法

Popup 方法

RegDelete 方法

RegRead 方法

RegWrite 方法

Run 方法

SendKeys 方法


WshShortcut 对象

WshShell Object

允许以编程方式创建快捷方式。

示例

下面的示例演示创建正在运行脚本的快捷方式：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

属性

Arguments 属性 | Description 属性 | FullName 属性 (WshShortcut 对象) | Hotkey 属性 | IconLocation 属性 | TargetPath 属性 | WindowStyle 属性 | WorkingDirectory 属性

方法

Save 方法

请参阅

运行脚本 | CreateShortcut 方法


WshShortcut 对象的属性和方法

属性

Arguments 属性

Description 属性

FullName 属性

Hotkey 属性

IconLocation 属性

TargetPath 属性

WindowStyle 属性

WorkingDirectory 属性

方法

Save 方法


WshSpecialFolders 对象

SpecialFolders PropertyWshShell Object

可以访问 Windows 特殊文件夹集。

说明

WshShell 对象的 SpecialFolders 属性返回 WshSpecialFolders 对象（特殊文件夹集）。该文件夹集包含对 Windows 特殊文件夹的引用（例如，Desktop 文件夹、Start Menu 文件夹和 Personal Documents 文件夹）。它将特殊文件夹名称用作索引，以便检索特殊文件夹的路径。特殊文件夹的路径取决于用户环境。特殊文件夹中存储的信息对于登录到计算机系统的用户是唯一的。如果在同一计算机系统上为不同的用户建立了帐户，则硬盘上会存储不同的特殊文件夹集。

以下特殊文件夹可用：

  • AllUsersDesktop
  • AllUsersStartMenu
  • AllUsersPrograms
  • AllUsersStartup
  • Desktop
  • Favorites
  • Fonts
  • MyDocuments
  • NetHood
  • PrintHood
  • Programs
  • Recent
  • SendTo
  • StartMenu
  • Startup
  • Templates

示例

下面的脚本演示 WshSpecialFolders 对象的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

属性

Item 属性

方法

Count 方法

请参阅

运行脚本 | SpecialFolders 属性


WshSpecialFolders 对象的属性和方法

属性

Item 属性

Length 属性

方法

Count 方法


WshUnnamed 对象

Unnamed PropertyWshArguments Object

提供对命令行的未命名参数的访问。

说明

WshUnnamed 对象是由 WshArguments 对象的 Unnamed 属性返回的只读参数集。各个参数值使用从零开始的索引从该参数集进行检索。WshArguments 对象的两个属性是经筛选的参数集 — 一个包含命名参数（WshNamed 对象），另一个包含未命名参数（WshUnnamed 对象）。它总共提供三种访问命令行参数集的方法：

  • 可以用 WshArguments 对象访问整个参数集（包括有或没有名称的参数）。
  • 可以用 WshNamed 对象访问有名称的参数。
  • 可以用 WshUnnamed 对象访问没有名称的参数。

示例

下面的示例演示已命名和未命名的命令行参数的数目。
<package>
<job id="JS">
<script language="JScript">

var argsNamed = WScript.Arguments.Named;
var argsUnnamed = WScript.Arguments.Unnamed;

WScript.Echo("There are " + argsNamed.length + " named arguments.");
WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments.");

</script>
</job>

<job id="VBS">
<script language="VBScript">

Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed

WScript.Echo "There are " & argsNamed.Count & " named arguments."
WScript.Echo "There are " & argsUnnamed.Count & " unnamed arguments."

</script>
</job>
</package>

属性

Item 属性 | Length 属性（WshArguments 对象）

方法

Count 方法

请参阅

WshArguments 对象 | WshNamed 对象


WshUnnamed 对象的属性和方法

属性

Item 属性

Length 属性

方法

Count 方法


WshUrlShortcut 对象

WshShell Object

允许以编程方式创建 Internet 资源的快捷方式。

说明

WshUrlShortcut 对象是 WshShell 对象的子对象 — 必须使用 WshShell 对象的 CreateShortcut 方法创建 WshUrlShortcut 对象（例如，WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")）。

示例

下面的示例演示创建 www.microsoft.com/china 的 URL 快捷方式。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

属性

FullName 属性（WshUrlShortcut 对象） | TargetPath 属性

方法

Save 方法

请参阅

运行脚本 | CreateShortcut 方法


WshUrlShortcut 对象的属性和方法

属性

FullName 属性

TargetPath 属性

方法

Save 方法


属性

本节内容

Arguments 属性
返回 WshArguments 对象。
AtEndOfLine 属性
返回一个表示是否到达输入行末尾的布尔值。
AtEndOfStream 属性
返回一个表示是否到达输入流末尾的布尔值。
Character 属性
报告代码行中有错误的特定字符。
Column 属性
返回输入流中当前字符位置的列号。
ComputerName 属性
返回计算机的名称。
CurrentDirectory 属性
允许您设置或检索活动脚本的当前工作文件夹。
Description 属性
返回快捷方式的说明。
Environment 属性
返回 WshEnvironment 对象。
Error 属性 (WshRemote)
显示 WshRemoteError 对象。
ExitCode 属性
返回通过 Exec() 方法运行的脚本/程序所设置的退出代码。
FullName 属性
返回完全限定路径名。
Hotkey 属性
允许您为快捷方式指派组合键，并确定该组合键。
IconLocation 属性
允许您为快捷方式指派图标，并确定哪个图标已指派给某个快捷方式。
Interactive 属性
允许您以编程方式设置脚本模式，并以编程方式确定脚本模式。
Item 属性
显示某个集合中的指定项。
Item 属性 (WshNamed)
提供对 WshNamed 对象中的项的访问权限。
Item 属性 (WshUnnamed)
使用从零开始编号的索引返回项。
Length 属性
返回集合内的项数。
Line 属性 (WScript)
返回输入流中当前的行号。
Line 属性 (WshRemote)
标识脚本中包含导致错误的语句的行。
Name 属性
返回 WScript 对象（宿主可执行文件）的友好名称。
Number 属性
报告表示脚本错误的错误编号。
Path 属性
返回包含 WScript 对象（宿主可执行文件）的目录名。
ProcessID 属性
报告由 WshScriptExec 对象启动进程的进程 ID (PID)。
ScriptFullName 属性
返回当前运行脚本的完整路径名。
ScriptName 属性
返回当前运行脚本的文件名。
Source 属性
标识导致脚本错误的 COM 对象。
SourceText 属性
包含导致错误的源代码行。
SpecialFolders 属性
返回 WshSpecialFolders 对象。
Status 属性 (WshRemote)
报告远程脚本的当前运行状况。
Status 属性 (WshScriptExec)
提供有关用 Exec() 方法运行的脚本的状态信息。
StdErr 属性 (WScript)
显示当前脚本的只写错误输出流。
StdErr 属性 (WshScriptExec)
显示 Exec 对象的只读 stderr 输出流。
StdIn 属性 (WScript)
显示当前脚本的只读输入流。
StdIn 属性 (WshScriptExec)
显示 Exec 对象的只写 stdin 输入流。
StdOut 属性 (WScript)
显示当前脚本的只写输出流。
StdOut 属性 (WshScriptExec)
显示 Exec 对象的只写 stdout 输出流。
TargetPath 属性
允许您为快捷方式指向的可执行文件指派路径，并确定快捷方式指向的可执行文件的路径。
UserDomain 属性
返回用户的域名。
UserName 属性
返回用户名。
Version 属性
返回 WSH 的版本。
WindowStyle 属性
允许您为快捷方式指派窗口样式，并确定快捷方式使用的窗口样式的类型。
WorkingDirectory 属性
允许您为快捷方式指派工作目录，并确定快捷方式使用的工作目录。

相关章节

WSH 参考
组成 WSH 参考的元素列表。
WSH 基础
了解 WSH 的基本概念。


Arguments 属性（Shortcut 对象）

设置或确定快捷方式的参数。

object.Arguments

参数

object
WshShortcut 对象。

说明

Arguments 属性返回一个字符串。

示例

下面的代码设置 Arguments 属性。

[VBScript]
set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
oShellLink.TargetPath = WScript.ScriptFullName
oShellLink.WindowStyle = 1
oShellLink.Hotkey = "Ctrl+Alt+f"
oShellLink.IconLocation = "notepad.exe, 0"
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = strDesktop
oShellLink.Arguments = "C:\myFile.txt"
oShellLink.Save
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var strDesktop = WshShell.SpecialFolders("Desktop");
var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
oShellLink.TargetPath = WScript.ScriptFullName;
oShellLink.WindowStyle= 1;
oShellLink.Hotkey= "Ctrl+Alt+f";
oShellLink.IconLocation= "notepad.exe, 0";
oShellLink.Description= "Shortcut Script";
oShellLink.WorkingDirectory= strDesktop;
oShellLink.Arguments = "C:\\myFile.txt"; oShellLink.Save();

请参阅

WshShortcut 对象 | WshShell 对象 | CreateShortcut 方法


Arguments 属性（WScript 对象）

返回 WshArguments 对象（参数集）。

object.Arguments

参数

object
WScript 对象。

说明

Arguments 属性中包含 WshArguments 对象（参数集）。使用从零开始的索引在该参数集中检索各个参数。

示例

下面的代码示例显示了与脚本相关的整个命令行参数集。

[VBScript]
Set objArgs = WScript.Arguments
For I = 0 to objArgs.Count - 1
   WScript.Echo objArgs(I)
Next
[JScript]
objArgs = WScript.Arguments;
for (i = 0; i < objArgs.length; i++)
{
   WScript.Echo(objArgs(i));
}

请参阅

WScript 对象 | WshArguments 对象 | WshNamed 对象 | WshUnnamed 对象


AtEndOfLine 属性（Windows 脚本宿主）

Windows 脚本宿主

AtEndOfLine 属性

返回一个指明是否已到达输入流行尾的布尔值。

object.AtEndOfLine

参数

object
StdIn 文本流对象。

说明

AtEndOfLine 属性中包含一个指明是否已到达输入流行尾的布尔值。如果流指针立即指向输入流行尾标记的前面，则 AtEndOfLine 属性返回 True，否则返回 False。StdIn、StdOut 及 StdErr 属性和方法仅在用 CScript.exe 运行脚本时可用。如果用 WScript.exe 运行该脚本就会出错。

示例

下面的示例将从键盘读取一行文本，并在该行结束时显示所敲入的内容。

[VBScript]
Dim Input
Input = ""

Do While Not WScript.StdIn.AtEndOfLine
   Input = Input & WScript.StdIn.Read(1)
Loop
WScript.Echo Input
[JScript]
var input = "";
while (!WScript.StdIn.AtEndOfLine)
{
   input += WScript.StdIn.Read(1);
}
WScript.Echo(input);

请参阅

StdIn 属性 | 错误信息


AtEndOfStream 属性（Windows 脚本宿主）

Windows 脚本宿主

AtEndOfStream 属性

返回一个指明是否已到达输入流结尾的布尔值。

object.AtEndOfStream

参数

object
StdIn 文本流对象。

说明

AtEndOfStream 属性中包含一个指明是否已到达输入流结尾的布尔值。如果流指针在输入流的结尾处，AtEndOfStream 属性将返回 True，否则返回 False。StdIn、StdOut 及 StdErr 属性和方法仅在用 CScript.exe 运行脚本时可用，如果是用 WScript.exe 运行该脚本就会出错。

示例

下面的代码通过从 "dir" 读取标准目录列表，去除不是实际条目的顶行和底行并将目录项之间的行距加倍来示例演示 AtEndOfStream 属性。

[VBScript]
Dim StdIn, StdOut, Str1, Str2

Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Str1 = ""
Str2 = ""For i = 0 to 4
   StdIn.SkipLine
Next

i = 0
Do While Not StdIn.AtEndOfStream
     If i >= 2 Then
          StdOut.WriteLine Str1
     End If
     i = i + 1
     Str1 = Str2
     Str2 = StdIn.ReadLine
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;
var str1, str2 = "";
var i;
for (i = 0; i < 5; i++)
     stdin.SkipLine();
i = 0;
while (!stdin.AtEndOfStream)
{
     if (i++ >= 2)
     {
          stdout.WriteLine(str1);
     }
     str1 = str2;
     str2 = stdin.ReadLine();
}

请参阅

StdIn 属性 | 错误信息


BuildVersion 属性

返回 Windows 脚本宿主的生成版本号。

Object.BuildVersion

参数

Object
WScript 对象。

说明

BuildVersion 属性返回一个整数值。

Windows 脚本宿主的完整版本号由产品的发行版本号，后跟生成版本号组成。例如，如果 Windows 脚本宿主的产品发行版本号为 5.6，而生成版本号为 6626，则完整版本号为 5.6.6626。

示例

下列代码返回 Windows 脚本宿主的完整版本号。它由产品的发行版本号和生成版本号组成。

WScript.Echo WScript.Version & "." & WScript.BuildVersion;

请参阅

Version 属性


Character 属性

报告某行代码中包含错误的特定字符。

Object.Character

参数

Object
WshRemoteError 对象。

说明

Character 属性返回一个带符号的长整型数。

有些错误和特定字符位置无关。例如，考虑错误 Expected End If。在这种情况下，没有任何行（缺少代码行）。此时，Character 属性返回零 (0)。

字符位置按照相对于位置 (1)（某行中驻留在位置 1 的第一个字符）的偏移来确定。

示例

下面的代码演示 WshRemoteError 对象如何展示代码行中有错误的字符。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

请参阅

WshRemote 对象 | WshRemoteError 对象 | Line 属性| Description 属性 | SourceText 属性 | Number 属性 | Source 属性


Column 属性（Windows 脚本宿主）

Windows 脚本宿主

Column 属性

返回输入流中当前字符位置的列数。

object.Column

参数

object
StdIn 文本流对象。

说明

Column 属性中包含一个只读整数值，它表示输入流中当前字符位置的列数。在写入一个新的换行符后（即使还没有写入任何其他字符），Column 属性等于 1。StdIn、StdOut 及 StdErr 属性和方法仅在用 CScript.exe 运行脚本时可用，如果是用 WScript.exe 运行该脚本就会出错。

示例

下面的代码通过从键盘读取输入并将其拆分为 20 个字符的行来演示 Column 属性的用法：

[VBScript]
Dim Input
Input = ""

Do While Not WScript.StdIn.AtEndOfLine
   Input = Input & WScript.StdIn.Read(1)
   If (WScript.StdIn.Column - 1) Mod 20 = 0 Then
      Input = Input & vbCrLf
   End If
Loop
WScript.Echo Input
[JScript]
var input = "";
while (!WScript.StdIn.AtEndOfLine)
{
   input += WScript.StdIn.Read(1);
   if ((WScript.StdIn.Column - 1) % 20 == 0)
   input += "\n";
}
WScript.Echo(input);

请参阅

StdIn 属性 | 错误信息


ComputerName 属性

返回计算机系统的名称。

object.ComputerName

参数

object
WshNetwork 对象。

说明

ComputerName 属性中包含一个指明计算机系统名称的字符串值。

示例

下面的示例演示 ComputerName 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
         }
      </script>
   </job>
</package>

请参阅

运行脚本 | WshNetwork 对象


CurrentDirectory 属性

检索或更改当前活动目录。

object.CurrentDirectory

参数

object
WshShell 对象。

说明

CurrentDirectory 返回一个字符串，其中包含活动过程的当前工作目录的完全限定路径。

示例

下面的代码显示当前活动目录。

[VBScript]
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo WshShell.CurrentDirectory
[JScript]
var WshShell = WScript.CreateObject ("WScript.Shell");
WScript.Echo (WshShell.CurrentDirectory);

请参阅

WshShell 对象


Description 属性（Windows 脚本宿主）

Windows 脚本宿主

Description 属性

返回快捷方式的说明。

object.Description

参数

object
WshShortcut 对象。

说明

Description 属性中包含一个说明快捷方式的字符串值。

示例

下面的示例演示 Description 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | WshShortcut 对象


Description 属性 (WshRemoteError)

包含导致远程脚本终止的简要错误说明。

Object.Description

参数

Object
WshRemoteError 对象。

说明

Description 属性返回一个字符串。

如果错误说明不可用，则 Description 属性返回一个空字符串。

示例

下面的代码演示 WshRemoteError 对象如何展示错误说明。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

请参阅

WshRemote 对象 | WshRemoteError 对象 | Line 属性 | Character 属性 | SourceText 属性 | Number 属性 | Source 属性


Environment 属性

返回 WshEnvironment 对象（环境变量集）。

object.Environment ([strType])

参数

object
WshShell 对象。
strType
可选。指定环境变量的位置。

说明

Environment 属性中包含 WshEnvironment 对象（环境变量集）。如果提供了 strType，则 Environment 属性指定环境变量可能的值为 System、User 还是 Volatile。如果未提供 strType，则 Environment 属性将根据操作系统返回不同类型的环境变量。

环境变量类型 | 操作系统
System | Microsoft Windows NT/2000
Process | Windows 95/98/Me
注意 对于 Windows 95/98/Me，只允许一种 strType —Process。

下表列出了 Windows 操作系统提供的一些变量。脚本可以访问由其他应用程序设置的环境变量。

注意 下列变量不能用于 Volatile 类型。
名称 | 说明 | 系统 | 用户 | 进程 (NT/ 2000) | 进程 (98/ME)
NUMBER_OF_PROCESSORS | 机器上运行的处理器数。 | X | - | X | -
PROCESSOR_ARCHITECTURE | 用户工作站上的处理器类型。 | X | - | X | -
PROCESSOR_IDENTIFIER | 用户工作站上的处理器 ID。 | X | - | X | -
PROCESSOR_LEVEL | 用户工作站上的处理器级别。 | X | - | X | -
PROCESSOR_REVISION | 用户工作站上的处理器版本。 | X | - | X | -
OS | 用户工作站上的操作系统。 | X | - | X | -
COMSPEC | 用于命令提示符的可执行文件（一般为 cmd.exe）。 | X | - | X | X
HOMEDRIVE | 本地主驱动器（一般为C 驱动器）。 | - | - | X | -
HOMEPATH | 用户的默认目录（在 Windows 2000 中一般为 \users\default）。 | - | - | X | -
PATH | PATH 环境变量。 | X | X | X | X
PATHEXT | 可执行文件的扩展名（一般为 .com、.exe、.bat 或 .cmd）。 | X | - | X | -
PROMPT | 命令提示符（一般为 $P$G）。 | - | - | X | X
SYSTEMDRIVE | 系统目录所在的本地驱动器（一般为 c:\）。 | - | - | X | -
SYSTEMROOT | 系统目录（例如，c:\winnt）。和 WINDIR 相同。 | - | - | X | -
WINDIR | 系统目录（例如，c:\winnt）。和 SYSTEMROOT相同。 | X | - | X | X
TEMP | 用来存储临时文件的目录（例如，c:\temp）。 | - | X | X | X
TMP | 用来存储临时文件的目录（例如，c:\temp）。 | - | X | X | X

示例

下面的代码用来检索系统环境变量 NUMBER_OF_PROCESSORS。

[VBScript]
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("SYSTEM")
WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var WshSysEnv = WshShell.Environment("SYSTEM");
WScript.Echo(WshSysEnv("NUMBER_OF_PROCESSORS"));

请参阅

WshEnvironment 对象 | WshShell 对象


Error 属性 (WshRemote)

展示 WshRemoteError 对象，它保留有关导致远程脚本过早终止错误的信息。

Object.Error

参数

Object
WshRemote 对象。

说明

Error 属性返回 WshRemoteError 对象。

示例

下面的代码演示 WshRemote 对象的 Error 属性如何展示 WshRemoteError 对象，其中包括行、字符和错误说明。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);    WScript.Quit(-1);
}

请参阅

WshController 对象 | WshRemote 对象 | WshRemoteError 对象 | Status 属性 | Execute 方法 | Terminate 方法 | Start 事件 | End 事件 | Error 事件


ExitCode 属性

返回由通过 Exec() 方法运行的脚本或程序设置的退出代码。

Object.ExitCode

参数

Object
WshScriptExec 对象

说明

可执行程序在完成运行时设置退出代码。它在过程结束时传递状态信息。通常，它用于将错误代码（或某些其他信息段）发送回调用方。如果过程仍未完成，ExitCode 属性返回 0。ExitCode 返回的值取决于所调用的应用程序。

示例

下面的代码示例 ExitCode 属性。

[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("%comspec% /c dire")

Function ReadAllFromAny(oExec)

     If Not oExec.StdOut.AtEndOfStream Then
          ReadAllFromAny = oExec.StdOut.ReadAll
          Exit Function
     End If

     If Not oExec.StdErr.AtEndOfStream Then
          ReadAllFromAny = oExec.StdErr.ReadAll
          Exit Function
     End If

     ReadAllFromAny = -1
End Function

Dim allInput, tryCount

allInput = ""
tryCount = 0

Do While True

     Dim input
     input = ReadAllFromAny(oExec)

     If -1 = input Then
          If tryCount > 10 And oExec.Status = 1 Then
               Exit Do
          End If
          tryCount = tryCount + 1
          WScript.Sleep 100
     Else
          allInput = allInput & input
          tryCount = 0
     End If
Loop

If oExec.ExitCode <> 0 Then
     WScript.Echo "Warning: Non-zero exit code"
End If

WScript.Echo allInput
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec    = WshShell.Exec("%comspec% /c dire");

function ReadAllFromAny(oExec)
{
     if (!oExec.StdOut.AtEndOfStream)
          return oExec.StdOut.ReadAll();

     if (!oExec.StdErr.AtEndOfStream)
          return oExec.StdErr.ReadAll();

     return -1;
}

var allInput = "";
var tryCount = 0;

while (true)
{
     var input = ReadAllFromAny(oExec);
     if (-1 == input)
     {
          if (tryCount++ > 10 && oExec.Status == 1)
               break;
          WScript.Sleep(100);
     }
     else
     {
          allInput += input;
          tryCount = 0;
     }
}

if (oExec.ExitCode != 0)
{
     WScript.Echo("Warning: Non-zero exit code");
}

WScript.Echo(allInput);

请参阅

Exec 方法 | WshScriptExec 对象


FullName 属性（WScript 对象）

返回主机可执行文件（CScript.exe 或 WScript.exe）的完全限定路径。

object.FullName

参数

object
WScript 对象。

说明

FullName 属性是代表主机可执行文件的完全限定路径的只读字符串。

示例

下面的 JScript 代码使用 FullName 属性。

WScript.Echo (WScript.FullName);

生成如下输出：

C:\WINNT\System32\cscript.exe

请参阅

Path 属性 | WScript 对象 | WshShortcut 对象 | WshUrlShortcut 对象


FullName 属性（WshShortcut 对象）

返回快捷方式对象目标的完全限定路径。

object.FullName

参数

object
WshShortcut 对象。

说明

FullName 属性中包含一个表示快捷方式目标的完全限定路径的只读字符串值。

示例

下面的代码用来检索快捷方式的完全限定路径。

[VBScript]
set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
oShellLink.TargetPath = WScript.ScriptFullName
oShellLink.WindowStyle = 1
oShellLink.Hotkey = "CTRL+SHIFT+F"
oShellLink.IconLocation = "notepad.exe, 0"
oShellLink.Description = "Shortcut Script"
oShellLink.WorkingDirectory = strDesktop
oShellLink.Save
WScript.Echo oShellLink.FullName
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
strDesktop = WshShell.SpecialFolders("Desktop");
var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
oShellLink.TargetPath = WScript.ScriptFullName;
oShellLink.WindowStyle = 1;
oShellLink.Hotkey = "CTRL+SHIFT+F";
oShellLink.IconLocation = "notepad.exe, 0";
oShellLink.Description = "Shortcut Script";
oShellLink.WorkingDirectory = strDesktop;
oShellLink.Save();
WScript.Echo(oShellLink.FullName);

请参阅

Path 属性 | WScript 对象 | WshShortcut 对象 | WshUrlShortcut 对象


FullName 属性（WshUrlShortcut 对象）

返回快捷方式对象目标的完全限定路径。

object.FullName

参数

object
WshUrlShortcut 对象。

说明

字符串。只读。

FullName 属性是一个表示快捷方式目标的完全限定路径的只读字符串。

示例

下面的代码用来检索 URL 快捷方式的完全限定路径。

[VBScript]
set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
oUrlLink.TargetPath = "http://www.microsoft.com"
oUrlLink.Save
WScript.Echo oUrlLink.FullName
[JScript]
var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
oUrlLink.TargetPath = "http://www.microsoft.com";
oUrlLink.Save();
WScript.Echo (oUrlLink.FullName);

请参阅

Path 属性 | WScript 对象 | WshShortcut 对象 | WshUrlShortcut 对象


Hotkey 属性

为快捷方式指派组合键，或确定指派给快捷方式的组合键。

object.Hotkey = strHotkey

参数

object
WshShortcut 对象。
strHotkey
代表指派给快捷方式的组合键的字符串。

语法

strHotkey 的语法为：

[KeyModifier]KeyName
KeyModifier
可以是以下的任何一个组合键：ALT+、CTRL+、SHIFT+、EXT+。

注意 EXT+ 表示“扩展键”。— 此处是为了防止日后将新的 SHIFT-键类型添加到字符集内。

KeyName
a ... z、 0 ... 9、F1 F12 ...

KeyName 不区分大小写。

说明

热键是一组组合键，当同时按下所有相关键时将启动快捷方式。

  • 热键可用于启动系统桌面和 Windows“开始”菜单中的快捷方式。
    注意 热键的另一个名称叫做“键盘快捷方式”。

在 Windows 2000 中，有效的热键总是以 CTRL + ALT 开头。

示例

下面的示例演示 HotKey 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | WshSpecialFolders 对象 | WshShortcut 对象


IconLocation 属性

为快捷方式指派图标，或确定指派给快捷方式的图标。

object.IconLocation = strIconLocation

参数

object
WshShortcut 对象。
strIconLocation
用于查找该图标的字符串。该字符串应包含与该图标相关联的完全限定路径和索引。有关详细信息，请参见示例。

说明

字符串。

示例

下面的示例演示 IconLocation 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"  'Zero is the index
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";  //Zero is the index
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | WshShortcut 对象


Interactive 属性

设置或确定脚本模式。

object.Interactive

参数

object
WScript 对象。

说明

Interactive 属性返回一个布尔值。

有批处理和交互两种模式。在交互模式（默认模式）下，该脚本为用户提供交互功能。启用对 Windows 脚本宿主的输入和输出。该脚本可以将信息显示在对话框中并等待用户提供反馈。在批处理模式下，不支持这种类型的用户交互 — 所有对 WSH 的输入和输出被禁用。还可以使用 Windows 脚本宿主命令行开关 //I（对于交互式）和 //B（对于批处理模式）来设置脚本模式。

示例

下面的 JScript 代码显示脚本模式。

WScript.Echo WScript.Interactive;

下面的 JScript 代码将脚本模式设置为批处理。

WScript.Interactive = false;

请参阅

WScript 对象


Item 属性（Windows 脚本宿主）

Windows 脚本宿主

Item 属性

展示集合中指定的项目。

Object.Item(natIndex)

参数

Object
EnumNetworkDrive 或 EnumPrinterConnections 方法的结果，或者由 Environment 或 SpecialFolders 属性返回的对象。
natIndex
要检索的项目。

说明

Item 是每个集合的默认属性。对于 EnumNetworkDrive 和 EnumPrinterConnections 集合来说，索引是一个整数；对 Environment 和 SpecialFolders 集合来说，索引是一个字符串。

如果请求的文件夹 (strFolderName) 不可用，则 WshShell.SpecialFolders.Item (strFolderName) 在 VBScript 中返回 "Empty"，而在 JScript 中返回 "undefined"。

下表列出了特殊文件夹以及支持它们的 Windows 版本。

文件夹 | Windows 版本
AllUsersDesktop | Windows 2000
AllUsersStartMenu | Windows 2000
AllUsersPrograms | Windows 2000
AllUsersStartup | Windows 2000
Desktop | Windows 98/ME，Windows 2000
Favorites | Windows 98/ME，Windows 2000
Fonts | Windows 98/ME，Windows 2000
My Documents | Windows 98/ME，Windows 2000
NetHood | Windows 98/ME，Windows 2000
PrintHood | Windows 98/ME，Windows 2000
Programs | Windows 98/ME，Windows 2000
Recent | Windows 98/ME, Windows 2000
SendTo | Windows 98/ME，Windows 2000
Start Menu | Windows 98/ME，Windows 2000
StartupB | Windows 2000
Templates | Windows 2000

示例

下面的代码显示驱动器和打印机的网络映射信息。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         Set oDrives = WshNetwork.EnumNetworkDrives
         Set oPrinters = WshNetwork.EnumPrinterConnections
         WScript.Echo "Network drive mappings:"
         For i = 0 to oDrives.Count - 1 Step 2
            WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
         Next
         WScript.Echo
         WScript.Echo "Network printer mappings:"
         For i = 0 to oPrinters.Count - 1 Step 2
            WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
         Next
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         var oDrives = WshNetwork.EnumNetworkDrives();
         var oPrinters = WshNetwork.EnumPrinterConnections();
         WScript.Echo();
         WScript.Echo("Network drive mappings:");
         for(i = 0; i < oDrives.length; i += 2){
            WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i + 1));
         }
         WScript.Echo();
         WScript.Echo("Network printer mappings:");
         for(i = 0; i < oPrinters.length; i += 2){
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i + 1));
         }
      </script>
   </job>
</package>

请参阅

EnumNetworkDrive 方法 | EnumPrinterConnections 方法 | Environment 属性 | SpecialFolders 属性


Item 属性 (WshNamed)

提供对 WshNamed 对象中项目的访问。

Object.Item(key)

参数

Object
WshNamed 对象
key
要检索的项目名称。

说明

Item 属性返回一个字符串。对于集合来说，它将根据指定的关键字返回一项。在命令行中输入参数时，如果要把字符串用引号括起来，那么可以在字符串参数中使用空格。参看以下示例：
myscript.vbs /stringarg:"This string has spaces"

WshNamed 集合中的引号将被删除。对于要出现在 WshNamed 集合中的参数，必须已在命令行中使用。如果该参数没有任何值（如简单变量或空字符串），则 Item 属性返回一个空字符串。从 Item 属性请求不存在的命名参数将导致错误。要查看变量是否存在，请使用 Exists 方法。

示例 1

在以下示例中，提供了两个用来运行脚本的命名参数。在脚本内部，代码可导致命名参数输出。Item 属性用于索引命名参数集。

' 在命令提示符处键入以下命令行运行该脚本。
myScript.vbs /c:arg1 /d:arg2

' 如果以下代码在脚本内部执行。
WScript.Echo WScript.Arguments.Named.Item("c")
WScript.Echo WScript.Arguments.Named.Item("d")

' 则生成以下输出。
arg1
arg2

请参阅

WshNamed 对象 | WshUnnamed 对象 | Count 方法 | Item 属性 | Exists 方法


Item 属性 (WshUnnamed)

返回使用从零开始的索引的项目。

Object.Item(key)

参数

Object
WshUnnamed 对象。
key
与某个集合或 WshUnnamed 对象相关联。

说明

Item 属性返回一个字符串。对于集合来说，它将根据指定的关键字返回一个项。

对于未命名的对象，项没有命名，因此无法传递 WshUnnamed 参数的名称。

WshUnnamed 参数项按其包含在命令行中的顺序进行保存。

在命令行输入 WshUnnamed 参数时，如果要把字符串用引号括起来，那么可以在字符串参数中使用空格。

WshUnnamed 集合中的引号将被删除。

示例

下面的示例演示 Item 属性如何用于返回 WshUnnamed 集合中的项目。在本例中，提供了两个用来运行脚本的未命名参数。在脚本内部，代码可导致未命名参数输出。Item 属性用于索引未命名参数集。

' 在命令提示符处键入以下命令行运行该脚本。
myScript.vbs arg1 arg2

' 当以下代码在脚本内部执行时：
WScript.Echo WScript.Arguments.Unnamed.Item(0)
WScript.Echo WScript.Arguments.Unnamed.Item(1)

' 生成以下输出：
arg1
arg2

请参阅

Arguments 属性 | WshUnnamed 对象 | WshUnnamed 对象 | Count 方法 | Item 属性 (WshNamed) | Exists 方法


length 属性（WshArguments 对象）

返回属于脚本的命令行参数的数量（变量集内的项数）。

object.length

参数

object
WshArguments 对象。

说明

length 属性是写入 Jscript 时在脚本中使用的只读整数。它与 VBScript 的 Count 方法类似。

请参阅

WshArguments 对象 | Arguments 属性 | Count 方法


length 属性（WshEnvironment 对象）

返回本地计算机系统中 Windows 环境变量的数量（Environment 集内的项数）。

object.length

参数

object
WshEnvironment 对象。

说明

length 属性是写入 Jscript 时在脚本中使用的只读整数。它与 VBScript 的 Count 方法类似。

请参阅

WshEnvironment 对象 | Count 方法


length 属性（WshSpecialFolders 对象）

返回本地计算机系统中 Windows 特殊文件夹的数量（SpecialFolders 集内的项数）。

object.length

参数

object
WshSpecialFolders 对象。

说明

length 属性是写入 Jscript 时在脚本中使用的只读整数。它与 VBScript 的 Count 方法类似。

请参阅

WshSpecialFolders 对象 | Count 方法


Line 属性 (WScript)

返回输入流中的当前行号。

object.strStream.Line

参数

object
WScript 对象。
strStream
StdIn 属性。

说明

Line 属性是一个只读整数。

第一次打开某个流之后，Line 将初始化为 1。

StdIn、StdOut 及 StdErr 属性和方法仅在用 CScript.exe 运行脚本时可用，如果是用 WScript.exe 运行该脚本就会出错。

示例

下面的代码演示 Line 属性的用法：

[VBScript]
Dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Do While Not StdIn.AtEndOfStream
     str = StdIn.ReadLine
     StdOut.WriteLine "Line " & (StdIn.Line - 1) & ": " & str
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream)
{
     var str = stdin.ReadLine();
     stdout.WriteLine("Line " + (stdin.Line - 1) + ": " + str);
}

请参阅

错误信息 | StdIn 属性


Line 属性 (WshRemoteError)

确定脚本中有错误的行。

Object.Line

参数

Object
WshRemoteError 对象。

说明

Line 属性返回一个不带符号的长整型数。

请注意，有些错误不发生在特定行。例如，考虑错误 Expected End If。在这种情况下，没有任何行（缺少代码行）。此时，Line 属性返回零 (0)。

示例

下面的代码演示 WshRemoteError 对象如何展示发生错误的行。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

请参阅

WshRemote 对象 | WshRemoteError 对象 | Character 属性 | Description 属性 | Line 属性 | SourceText 属性 | Number 属性 | Source 属性


Name 属性（WScript 对象）

返回 WScript 对象（主机可执行文件）的名称。

object.Name

参数

object
WScript 对象。

说明

Name 属性是一个只读字符串。

示例

下面的 JScript 代码演示 Name 属性的用法。

WScript.Echo (WScript.Name);

请参阅

WScript 对象


Named 属性

返回 WshNamed 对象（命名参数集）。

Object.Named

参数

Object
WshArguments 对象。

说明

Named 属性返回 WshNamed 集（命名参数集）。使用参数的名称来查找是否包含该参数并访问其值。

示例

下面的代码显示已命名和未命名命令行的参数数目。

<package>
<job id="JS">
<script language="JScript">

var argsNamed = WScript.Arguments.Named;
var argsUnnamed = WScript.Arguments.Unnamed;

WScript.Echo("There are " + argsNamed.length + " named arguments.");
WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments.");

</script>
</job>

<job id="VBS">
<script language="VBScript">

Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed

WScript.Echo "There are " & argsNamed.Count & " named arguments."
WScript.Echo "There are " & argsUnnamed.Count & " unnamed arguments."

</script>
</job>
</package>

请参阅

WshArguments 对象 | WshNamed 对象 | Unnamed 属性


Number 属性（Windows 脚本宿主）

Windows 脚本宿主

Number 属性

报告表示脚本错误的错误号。

Object.Number

参数

Object
WshRemoteError 对象。

说明

Number 属性返回一个不带符号的长整型数。

示例

下面的代码演示 WshRemoteError 对象如何展示错误号。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

请参阅

WshRemote 对象 | WshRemoteError 对象 | Description 属性 | Line 属性 | Character 属性| SourceText 属性| Source 属性


Path 属性（Windows 脚本宿主）

Windows 脚本宿主

Path 属性

返回包含主机可执行文件（CScript.exe 或 WScript.exe）的路径名称。

object.Path

参数

object
WScript 对象。

说明

Path 属性是一个只读字符串。

示例

下面的 VBScript 代码显示可执行文件所在的目录。

WScript.Echo (WScript.Path);

请参阅

FullName 属性 | WScript 对象


ProcessID 属性

用 WshScriptExec 对象启动的过程的 ID (PID)。

Object.ProcessID

参数

Object
WshScriptExec 对象。

说明

可以使用 ProcessID 属性来激活应用程序（作为 AppActivate 方法的参数）。

示例

下面的代码使用 ProcessID 属性来激活计算器和笔记本应用程序。

[VBScript]
Sub delayedSendKeys(str)
     WScript.Sleep 100
     WshShell.SendKeys str
End Sub

Dim WshShell, oCalc, oNotepad
Set WshShell = CreateObject("WScript.Shell")
Set oCalc = WshShell.Exec("calc")
Set oNotepad = WshShell.Exec("notepad")
WScript.Sleep 500

WshShell.AppActivate oCalc.ProcessID
delayedSendKeys "1{+}1~"
delayedSendKeys "^C"
delayedSendKeys "%{F4}"

WshShell.AppActivate oNotepad.ProcessID
delayedSendKeys "1 {+} 1 = ^V"
[JScript]
function delayedSendKeys(str)
{
     WScript.Sleep(100);
     WshShell.SendKeys(str);
}

var WshShell = new ActiveXObject("WScript.Shell");
var oCalc = WshShell.Exec("calc");
var oNotepad = WshShell.Exec("notepad");
WScript.Sleep(500);

WshShell.AppActivate(oCalc.ProcessID);
delayedSendKeys("1{+}1~");
delayedSendKeys("^C");
delayedSendKeys("%{F4}");

WshShell.AppActivate(oNotepad.ProcessID);
delayedSendKeys("1 {+} 1 = ^V");

请参阅

WshScriptExec 对象 | AppActivate 方法


RelativePath 属性

为快捷方式指派相对路径，或确定快捷方式的相对路径。

object.RelativePath

参数

object
WshShortcut 对象。

说明

字符串。

示例

下面的代码显示快捷方式的相对路径。

[VBScript]
Dim WshShell, WshShortcut
Set WshShell = WScript.CreateObject ("WScript.Shell")
Set WshShortcut = WshShell.CreateShortcut("MyScript.lnk")
WshShortcut.RelativePath = "C:\Scripts\"
[JScript]
var WshShell = WScript.CreateObject ("WScript.Shell");
var WshShortcut = WshShell.CreateShortcut("MyScript.lnk");
WshShortcut.RelativePath = "C:\\Scripts\\";

请参阅

WshShortcut 对象


ScriptFullName 属性

返回当前运行脚本的完整路径。

object.ScriptFullName

参数

object
WScript 对象。

说明

ScriptFullName 属性是一个只读字符串。

示例

下面的示例演示 ScriptFullName 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | ScriptName 属性 | WScript 对象


ScriptName 属性

返回当前运行脚本的文件名。

object.ScriptName

参数

object
WScript 对象。

说明

ScriptName 属性是一个只读字符串。

示例

下面的 VBScript 代码显示正在运行脚本的名称。

WScript.Echo WScript.ScriptName

请参阅

ScriptFullName 属性 | WScript 对象


Source 属性（Windows 脚本宿主）

Windows 脚本宿主

Source 属性

确定导致脚本错误的 COM 对象。

Object.Source

参数

Object
WshRemoteError 对象。

说明

Source 属性返回一个字符串。

示例

下面的代码演示 WshRemoteError 对象如何展示导致脚本错误的 COM 对象。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description & vbCrLf & "Source: " & theError.Source
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description + "\nSource: " + theError.Source);
    WScript.Quit(-1);
}

请参阅

WshRemote 对象 | WshRemoteError 对象 | Description 属性 | Line 属性 | Character 属性| SourceText 属性| Number 属性


SourceText 属性

包含导致错误的源代码行。

Object.SourceText

参数

Object
WshRemoteError 对象。

说明

SourceText 属性返回一个字符串。

不是任何情况下都可以获得源文本。如果得不到源文本，SourceText 属性将返回一个空字符串。

示例

下面的代码演示 WshRemoteError 对象如何展示导致错误的源代码行。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description & vbCrLf & "Source Text: " & theError.SourceText
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description + "\nSource Text: "_+ theError.SourceText);
    WScript.Quit(-1);
}

请参阅

WshRemote 对象 | WshRemoteError 对象 | Description 属性 | Line 属性 | Character 属性| Number 属性 | Source 属性


SpecialFolders 属性

返回 SpecialFolders 对象（特殊文件夹集）。

object.SpecialFolders(objWshSpecialFolders)

参数

object
WshShell 对象。
objWshSpecialFolders
特殊文件夹的名称。

说明

  • WshSpecialFolders 对象是一个集合，其中包含整套 Windows 特殊文件夹，如 "Desktop" 文件夹、"Start Menu" 文件夹和 "Personal Documents" 文件夹。特殊文件夹名称用于索引该集合以检索所需的特殊文件夹。如果请求的文件夹 (strFolderName) 不可用，则 SpecialFolders 属性返回一个空字符串。例如，Windows 95 中没有 AllUsersDesktop 文件夹，如果 strFolderName 是 AllUsersDesktop，则返回一个空字符串。

下面的特殊文件夹可用：

  • AllUsersDesktop
  • AllUsersStartMenu
  • AllUsersPrograms
  • AllUsersStartup
  • Desktop
  • Favorites
  • Fonts
  • MyDocuments
  • NetHood
  • PrintHood
  • Programs
  • Recent
  • SendTo
  • StartMenu
  • Startup
  • Templates

示例

下面的示例演示 SpecialFolders 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | WshSpecialFolders 对象 | WshShell 对象


Status 属性 (WshRemote)

报告远程脚本的当前状态。

Object.Status

参数

Object
WshRemote 对象。

说明

Status 属性返回只读枚举数据类型。

值

Status 属性返回以下某个可能的值。

返回值 | 数值 | 说明
NoTask | 0 | 远程脚本对象已经创建但尚未执行。
Running | 1 | 远程脚本对象正在运行。
Finished | 2 | 远程脚本对象运行完毕。

示例

下面的代码演示如何在测试块中使用 Status 属性，来查看远程脚本是否正常终止。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

请参阅

WshController 对象 | WshRemote 对象 | Error 属性 | Execute 方法 | Terminate 方法 | Start 事件 | End 事件 | Error 事件


Status 属性 (WshScriptExec)

提供有关用 Exec() 方法运行脚本的状态信息。

Object.Status

参数

Object
WshScriptExec 对象。

说明

Status 属性用于程序异步运行时。

返回值

Status 属性从枚举类型中返回一个值。

WshRunning ( = 0)
作业仍在运行。
WshFinished ( = 1)
作业已完成。

示例

下面的代码运行 calc.exe 并在屏幕上显示最终状态：

[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

Set oExec = WshShell.Exec("calc")

Do While oExec.Status = 0
     WScript.Sleep 100
Loop

WScript.Echo oExec.Status
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec = WshShell.Exec("calc");

while (oExec.Status == 0)
{
     WScript.Sleep(100);
}

WScript.Echo(oExec.Status);

请参阅

Exec 方法 | WshScriptExec 对象


StdErr 属性 (WScript)

展示当前脚本的只写错误输出流。

object.StdErr

参数

object
WScript 对象。

说明

StdErr 属性返回一个表示标准错误流的对象。只可在使用 CScript.exe 时访问 StdIn、StdOut 和 StdErr 流。如果试图在使用 WScript.exe 时访问这些流，则会出错。

请参阅

错误信息 | WScript 对象


StdErr 属性 (WshScriptExec)

提供对 Exec 对象的 stderr 输出流的访问。

Object.StdErr

参数

Object
WshScriptExec 对象。

说明

使用 StdErr 属性来检索从用 Exec 启动的过程中发送到 stderr 流的数据。

示例

下面的代码通过试图执行一条不存在的命令并显示结果来演示 StdErr对象。
[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("%comspec% /c dire")

Function ReadAllFromAny(oExec)

     If Not oExec.StdOut.AtEndOfStream Then
          ReadAllFromAny = oExec.StdOut.ReadAll
          Exit Function
     End If

     If Not oExec.StdErr.AtEndOfStream Then
          ReadAllFromAny = "STDERR: " + oExec.StdErr.ReadAll
          Exit Function
     End If

     ReadAllFromAny = -1
End Function

Dim allInput, tryCount

allInput = ""
tryCount = 0

Do While True

     Dim input
     input = ReadAllFromAny(oExec)

     If -1 = input Then
          If tryCount > 10 And oExec.Status = 1 Then
               Exit Do
          End If
          tryCount = tryCount + 1
          WScript.Sleep 100
     Else
          allInput = allInput & input
          tryCount = 0
     End If
Loop

WScript.Echo allInput
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec    = WshShell.Exec("%comspec% /c dire");

function ReadAllFromAny(oExec)
{
     if (!oExec.StdOut.AtEndOfStream)
          return oExec.StdOut.ReadAll();

     if (!oExec.StdErr.AtEndOfStream)
          return "STDERR: " + oExec.StdErr.ReadAll();

     return -1;
}

var allInput = "";
var tryCount = 0;

while (true)
{
     var input = ReadAllFromAny(oExec);
     if (-1 == input)
     {
          if (tryCount++ > 10 && oExec.Status == 1)
               break;
          WScript.Sleep(100);
     }
     else
     {
          allInput += input;
          tryCount = 0;
     }
}

WScript.Echo(allInput);

请参阅

WshScriptExec 对象 | StdIn 属性 | StdOut 属性


StdIn 属性 (WScript)

显示当前脚本的只读输入流。

object.StdIn

参数

object
WScript 对象。

说明

StdIn 属性返回一个表示标准输入流的对象。只可在使用 CScript.exe 时访问 StdIn、StdOut 和 StdErr 流。如果试图在使用 WScript.exe 时访问这些流，则会出错。

请参阅

错误信息 | WScript 对象 | Read 方法 | ReadAll 方法 | ReadLine 方法 | Skip 方法 | SkipLine 方法 | AtEndOfLine 属性 | Close 方法 | Column 属性 | Line 属性 (WScript)


StdIn 属性 (WshScriptExec)

展示 Exec 对象的 stdin 输入流。

Object.StdIn

参数

Object
WshScriptExec 对象。

说明

使用 StdIn 属性将数据传递到用 Exec 启动的过程中。

示例

下面的代码启动一个批文件后等待用户输入提示。通过 StdIn 流输入所需数据之后该批文件结束。

[VBScript]
Dim WshShell, oExec, input
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("test.bat")
input = ""

Do While True

     If Not oExec.StdOut.AtEndOfStream Then
          input = input & oExec.StdOut.Read(1)
          If InStr(input, "Press any key") <> 0 Then Exit Do
     End If
     WScript.Sleep 100
Loop

oExec.StdIn.Write VbCrLf

Do While oExec.Status <> 1
     WScript.Sleep 100
Loop
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec    = WshShell.Exec("test.bat");
var input = "";

while (true)
{
     if (!oExec.StdOut.AtEndOfStream)
     {
          input += oExec.StdOut.Read(1);
          if (input.indexOf("Press any key") != -1)
               break;
     }
     WScript.Sleep(100);
}

oExec.StdIn.Write("\n");

while (oExec.Status != 1)
     WScript.Sleep(100);

请参阅

WshScriptExec 对象 | StdIn 属性 | StdErr 属性


StdOut 属性 (WScript)

显示当前脚本的只读输出流。

object.StdOut

参数

object
WScript 对象。

说明

StdOut 属性返回一个表示标准输出流的对象。只可在使用 CScript.exe 时访问 StdIn、StdOut 和 StdErr 流。如果试图在使用 WScript.exe 时访问这些流，则会出错。

请参阅

错误信息 | WScript 对象 | Write 方法 | WriteBlankLines 方法 | WriteLine 方法 | Close 方法 | Column 属性 | Line 属性 (WScript)


StdOut 属性 (WshScriptExec)

显示 Exec 对象的只写 stdout 输出流。

Object.StdOut

参数

Object
WshScriptExec 对象。

说明

StdOut 属性中包含脚本可能已发送到标准输出的任何信息的只读副本。

示例

下面的代码启动一个批文件后等待用户输入提示。通过 StdIn 流输入所需数据之后该批文件结束。

[VBScript]
Dim WshShell, oExec, input
Set WshShell = CreateObject("WScript.Shell")
Set oExec    = WshShell.Exec("test.bat")
input = ""

Do While True

     If Not oExec.StdOut.AtEndOfStream Then
          input = input & oExec.StdOut.Read(1)
          If InStr(input, "Press any key") <> 0 Then Exit Do
     End If
     WScript.Sleep 100
Loop

oExec.StdIn.Write VbCrLf

Do While oExec.Status <> 1
     WScript.Sleep 100
Loop
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec    = WshShell.Exec("test.bat");
var input = "";

while (true)
{
     if (!oExec.StdOut.AtEndOfStream)
     {
          input += oExec.StdOut.Read(1);
          if (input.indexOf("Press any key") != -1)
               break;
     }
     WScript.Sleep(100);
}

oExec.StdIn.Write("\n");

while (oExec.Status != 1)
     WScript.Sleep(100);

请参阅

WshScriptExec 对象 | StdIn 属性 | StdErr 属性


TargetPath 属性

快捷方式的可执行文件的路径。

object.TargetPath

参数

object
WshShortcut 或 WshUrlShortcut 对象。

说明

字符串。

该属性仅用于快捷方式的目标路径。快捷方式的任何参数都必须放在参数的属性中。

示例

下面的示例演示 TargetPath 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | WshShortcut 对象 | WshUrlShortcut 对象


Unnamed 属性

返回 WshUnnamed 对象（未命名参数集）。

Object.Unnamed

参数

Object
WshArguments 对象。

说明

Unnamed 属性返回 WshUnnamed 集（未命名参数集）。参数按其在命令行中的输入顺序展示。第一个未命名参数的索引号为 0。

示例

下面的代码显示已命名和未命名命令行的参数数目。

<package>
<job id="JS">
<script language="JScript">

var argsNamed = WScript.Arguments.Named;
var argsUnnamed = WScript.Arguments.Unnamed;

WScript.Echo("There are " + argsNamed.length + " named arguments.");
WScript.Echo("There are " + argsUnnamed.length + " unnamed arguments.");

</script>
</job>

<job id="VBS">
<script language="VBScript">

Dim argsNamed, argsUnnamed
Set argsNamed = WScript.Arguments.Named
Set argsUnnamed = WScript.Arguments.Unnamed

WScript.Echo "There are " & argsNamed.Count & " named arguments."
WScript.Echo "There are " & argsUnnamed.Count & " unnamed arguments."

</script>
</job>
</package>

请参阅

WshArguments 对象 | WshUnnamed 对象 | Named 属性


UserDomain 属性

返回用户的域名。

object.UserDomain

参数

object
WshNetwork 对象。

说明

字符串。

如果未设置 USERDOMAIN 环境变量，则 UserDomain 属性不能在 Windows98 和 Windows ME 中运行。默认情况下不设置该变量。

示例

下面的示例演示 UserDomain 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
         }
      </script>
   </job>
</package>

请参阅

运行脚本 | WshNetwork 对象


UserName 属性

返回用户名。

object.UserName

参数

object
WshNetwork 对象。

说明

字符串。

如果在登录脚本中使用了该属性，请参见创建自动登录脚本。

示例

下面的示例演示 UserName 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         WScript.Echo "Domain = " & WshNetwork.UserDomain
         WScript.Echo "Computer Name = " & WshNetwork.ComputerName
         WScript.Echo "User Name = " & WshNetwork.UserName
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         WScript.Echo("Domain = " + WshNetwork.UserDomain);
         WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
         WScript.Echo("User Name = " + WshNetwork.UserName);
         }
      </script>
   </job>
</package>

请参阅

运行脚本 | WshNetwork 对象


Version 属性

返回 Windows 脚本宿主的版本。

object.Version

参数

object
WScript 对象。

说明

字符串。

示例

下面的 VBScript 代码显示 Windows 脚本宿主的当前版本。

WScript.Echo WScript.Version

请参阅

WScript 对象


WindowStyle 属性

为快捷方式指派窗口样式，或确定快捷方式使用的的窗口样式类型。

object.WindowStyle = intWindowStyle

参数

object
WshShortcut 对象。
intWindowStyle
设置正在运行的程序的窗口样式。

说明

WindowStyle 属性返回一个整数。

下表列出了 intWindowStyle 的可用设置。

intWindowStyle | 说明
1 | 激活并显示窗口。如果该窗口被最小化或最大化，则系统将其还原到初始大小和位置。
3 | 激活窗口并将其显示为最大化窗口。
7 | 最小化窗口并激活下一个顶级窗口。

示例

下面的示例演示 WindowStyle 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | WshShortcut 对象


WorkingDirectory 属性

为快捷方式指派工作目录，或者确定快捷方式使用的工作目录。

object.WorkingDirectory = strWorkingDirectory

参数

object
WshShortcut 对象。
strWorkingDirectory
字符串。快捷方式的启动目录。

说明

字符串。

示例

下面的示例演示 WorkingDirectory 属性的用法：

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "Ctrl+Alt+e"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "Ctrl+Alt+e";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本


方法

本节内容

AddPrinterConnection 方法
将 DOS 样式的打印机连接添加到计算机中。
AddWindowsPrinterConnection 方法
将 Windows 样式的打印机连接添加到计算机中。
AppActivate 方法
激活应用程序窗口。
Close 方法
关闭打开的流。
ConnectObject 方法
将对象的事件来源连接到包含给定前缀的函数中。
Count 方法
返回 WshNamed 或 WshUnnamed 对象中的开关数。
CreateObject 方法
创建由 strProgID 参数指定的对象。
CreateScript 方法
创建 WshRemote 对象（表示在远程进程中运行的脚本实例的对象）。
CreateShortcut 方法
创建对快捷方式或 URL 快捷方式的对象引用。
DisconnectObject 方法
从 Windows 脚本宿主断开以前连接的对象。
Echo 方法
将输出发送到对话框或控制台。
EnumNetworkDrives 方法
返回当前的网络驱动器映射。
EnumPrinterConnections 方法
返回当前的网络打印机映射。
Exec 方法
在子命令外壳中运行应用程序，提供对 tdin/stdout/stderr 通道的访问权限，以及环境变量的共享。
Execute 方法
开始执行远程脚本对象。
Exists 方法
表示某个键值是否存在于 WshNamed 对象中。
ExpandEnvironmentStrings 方法
展开向运行过程中请求的环境变量并返回结果字符串。
GetObject 方法
从 strProgID 参数确定的文件或对象检索 Automation 对象。
getResource 方法
返回由资源元素定义的资源的值。
LogEvent 方法
在 Windows NT 事件日志或 WSH.log 文件中记录事件。
MapNetworkDrive 方法
将 strRemoteName 指定的共享点映射为本地资源名 strLocalName。
Popup 方法
显示包含 strText 中所含消息的弹出式消息框窗口。
Quit 方法
用指定的错误代码退出执行。
Read 方法
从输入流读取特定数量的字符，并返回生成的字符串。
ReadAll 方法
读取整个输入流，并返回生成的字符串。
ReadLine 方法
从输入流读取一整行（截止到但不包括换行符），并返回生成的字符串。
RegDelete 方法
从注册表中删除由 strName 命名的注册表项或值。
RegRead 方法
返回由 strName 命名的注册表项或值。
RegWrite 方法
设置由 strName 命名的注册表项或值。
Remove 方法
删除由 strName 指定的环境变量。
RemoveNetworkDrive 方法
删除由 strName 表示的当前资源连接。
RemovePrinterConnection 方法
删除由 strName 表示的当前资源连接。
Run 方法
创建执行 strCommand 的新过程。
Save 方法
将快捷方式保存到指定位置。
SendKeys 方法
将一个或多个键击发送到活动窗口（就象在键盘上击键一样）。
SetDefaultPrinter 方法
将默认打印机设为指定的远程打印机。
ShowUsage 方法
显示有关应该如何使用脚本的信息。
Skip 方法
在读取输入流时，跳过指定数量的字符。
SkipLine 方法
读取输入流时跳过下一行。
Sleep 方法
在指定的毫秒数内将脚本过程置于非活动状态，然后继续执行。
Terminate 方法 (WshScriptExec)
命令脚本引擎终止由 "Exec" 方法启动的过程。
Write 方法
将指定的字符串写入输出流。
WriteBlankLines 方法
将指定数量的换行符写入输出流中。
WriteLine 方法
将指定的字符串和换行符写入输出流中。

相关章节

WSH 参考
组成 WSH 参考的元素列表。
WSH 基础
了解 WSH 的基本概念。


AddPrinterConnection 方法

将基于 MS-DOS 的远程打印机连接添加到计算机系统中。

object.AddPrinterConnection(strLocalName, strRemoteName[,bUpdateProfile][,strUser][,strPassword])

参数

object
WshNetwork 对象。
strLocalName
表示指派给所连接打印机的本地名称的字符串值。
strRemoteName
表示远程打印机名称的字符串值。
bUpdateProfile
可选。表示打印机映射是否存储在用户配置文件中的布尔值。如果提供了 bUpdateProfile 且其值为 true，则该映射存储在用户配置文件中。默认值为 false。
strUser
可选。表示用户名的字符串值。如果要使用当前用户以外的用户配置文件映射远程打印机，则可指定 strUser 和 strPassword。
strPassword
可选。表示用户密码的字符串值。如果要使用当前用户以外的用户配置文件映射远程打印机，则可指定 strUser 和 strPassword。

说明

AddPrinterConnection 方法将网络打印机添加到 MS-DOS 打印机端口，如 LPT1。不能利用该方法添加基于 Windows 的远程打印机连接。要添加基于 Windows 的远程打印机连接，请使用 AddWindowsPrinterConnection 方法。

示例

以下代码使用 AddPrinterConnection 方法将网络打印机连接到 LPT1。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.AddPrinterConnection "LPT1", "\\Server\Print1"
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
WshNetwork.AddPrinterConnection ("LPT1", "\\\\Server\\Print1");

请参阅

WshNetwork 对象 | AddWindowsPrinterConnection 方法 | EnumPrinterConnections 方法 | RemovePrinterConnection 方法 | SetDefaultPrinter 方法


AddWindowsPrinterConnection 方法

将基于 Windows 的打印机连接添加到计算机系统中。

Windows NT/2000:
object.AddWindowsPrinterConnection(
strPrinterPath
)
Windows 9x/Me:
object.AddWindowsPrinterConnection(
strPrinterPath,
strDriverName[,strPort]
)

参数

object
WshNetwork 对象。
strPrinterPath
表示打印机连接路径的字符串值。
strDriverName
表示驱动程序名称的字符串值（如果驱动程序用在 Windows NT/Windows 2000 上，则忽略）。
strPort
可选。指定打印机连接端口的字符串值（如果是在 Windows NT/Windows 2000 上，则忽略）。

说明

使用该方法的效果类似于在控制面板上使用“打印机”选项来添加打印机连接。与 AddPrinterConnection 方法不同的是，该方法允许您创建打印机连接，而无需将它指向某个端口，如 LPT1。如果连接失败，则会出错。在 Windows 9x/Me 中，计算机上必须已安装打印机驱动程序，AddWindowsPrinterConnection 方法才能奏效。否则，Windows 将返回一条错误信息。

示例 1

以下代码使用 AddWindowsPrinterConnection 方法将网络打印机连接到 Windows NT/2000 计算机系统中。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\printserv\DefaultPrinter"
WshNetwork.AddWindowsPrinterConnection PrinterPath
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
var PrinterPath = "\\\\printserv\\DefaultPrinter";
WshNetwork.AddWindowsPrinterConnection(PrinterPath);

示例 2

以下代码使用 AddWindowsPrinterConnection 方法将网络打印机连接到 Windows 9x/Me 计算机系统中。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\printserv\DefaultPrinter"
PrinterDriver = "Lexmark Optra S 1650"
WshNetwork.AddWindowsPrinterConnection PrinterPath, PrinterDriver
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
var PrinterPath = "\\\\printserv\\DefaultPrinter";
var PrinterDriver = "Lexmark Optra S 1650";
WshNetwork.AddWindowsPrinterConnection(PrinterPath, PrinterDriver);

请参阅

WshNetwork 对象 | AddPrinterConnection 方法 | EnumPrinterConnections 方法 | RemovePrinterConnection 方法 | SetDefaultPrinter 方法


AppActivate 方法

激活应用程序窗口。

object.AppActivate title

参数

object
WshShell 对象。
title
指定要激活哪个应用程序。它可以是包含应用程序的标题（和出现在标题栏中的一样）或过程 ID 的字符串。

说明

AppActivate 方法返回的布尔值表示过程调用是否成功。该方法将焦点转移到命名应用程序或窗口中，但是并不影响应用程序或窗口是最大化还是最小化。用户执行更改焦点的操作（或关闭窗口）时，焦点移离活动的应用程序窗口。

在确定要激活哪个应用程序时，指定的标题将与正在运行的每个应用程序的标题字符串相比较。如果不存在完全匹配的标题，则将激活标题字符串以 title 开头的所有应用程序。如果还是找不到任何应用程序，则将激活标题字符串以 title 结尾的所有应用程序。如果存在多个名为 title 的应用程序实例，则将随机激活一个实例。

示例

下面的示例演示如何将一个 .wsf 文件用于以不同脚本语言（VBScript 和 Jscript）写成的两个作业。两个作业的功能相同 — 每个作业都运行 Windows 计算器并将它发送给键击以执行简单的计算。

下面的示例启动 Windows 计算器并使用 AppActivate 来确保计算器在顶部。

<package>
<job id="vbs">
<script language="VBScript">
set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "calc"
WScript.Sleep 100
WshShell.AppActivate "Calculator"
WScript.Sleep 100
WshShell.SendKeys "1{+}"
WScript.Sleep 500
WshShell.SendKeys "2"
WScript.Sleep 500
WshShell.SendKeys "~"
WScript.Sleep 500
WshShell.SendKeys "*3"
WScript.Sleep 500
WshShell.SendKeys "~"
WScript.Sleep 2500
</script>
</job>

<job id="js">
<script language="JScript">
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.Run("calc");
WScript.Sleep(100);
WshShell.AppActivate("Calculator");
WScript.Sleep(100);
WshShell.SendKeys("1{+}");
WScript.Sleep(500);
WshShell.SendKeys("2");
WScript.Sleep(500);
WshShell.SendKeys("~");
WScript.Sleep(500);
WshShell.SendKeys("*3");
WScript.Sleep(500);
WshShell.SendKeys("~");
WScript.Sleep(2500);
</script>
</job>
</package>

请参阅

运行脚本 | WshShell 对象 | SendKeys 方法


Close 方法（Windows 脚本宿主）

Windows 脚本宿主

Close 方法

关闭文本流。

object.Close

参数

object
StdIn、StdOut 或 StdErr 文本流对象。

说明

StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。如果用 WScript.exe 运行脚本，则会返回错误。不必关闭标准流；它们会在过程终止时自动关闭。如果关闭标准流，则要注意指向标准流的任何其他指针将变得无效。该方法旨在与 TextStream 对象兼容。

请参阅

StdErr 属性 | StdIn 属性 | StdOut 属性 | 错误信息


ConnectObject 方法

将对象的事件源连接到具有给定前缀的函数。

object.ConnectObject(strObject, strPrefix)

参数

object
WScript 对象。
strObject
必需。表示要连接的对象名称的字符串值。
strPrefix
必需。表示函数前缀的字符串值。

说明

当您要同步对象的事件时，已连接的对象非常有用。创建对象后，ConnectObject 方法将该对象的输出接口连接到脚本文件。事件函数由该前缀和事件名称组成。

示例

下面的示例演示使用 ConnectObject 方法连接WshRemote 对象的错误事件。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

请参阅

WScript 对象 | DisconnectObject 方法 | CreateObject 方法 | GetObject 方法


Count 方法

返回 WshNamed 或 WshUnnamed 对象中的开关数。

object.Count

参数

object
Arguments 对象。

说明

Count 方法返回整数值。Count 方法主要是为 VBSript 用户所用, JScript 用户一般使用length 属性。

示例 (WshNamed)

下面的示例使用 WshNamed 对象演示 Count 方法。先在命令提示符处键入下面的文本：

myScript.vbs /c:"WSH is a wonderful thing" /s:"scripts are wonderful"

接着，添加下面的 VBScript 代码：

For i = 0 to WScript.Arguments.Count-1
    WScript.Echo WScript.Arguments.Named(i)
next i

生成的结果如下所示：

WSH is a wonderful thing
scripts are wonderful

示例 (WshUnnamed)

下面的示例使用 WshUnnamed 对象演示 Count 方法。先在命令行中键入下面的文本：

myscript.vbs "WSH is a wonderful thing" "scripts are wonderful"

接着，添加下面的 VBScript 代码：

For i = 0 to WScript.Arguments.Count-1
    WScript.Echo WScript.Arguments.Unnamed(i)
next i

结果如下所示：

WSH is a wonderful thing
scripts are wonderful

请参阅

Arguments 属性 | WshNamed 对象 | WshUnnamed 对象 | Item 属性 | Exists 方法 | Length 方法


CreateObject 方法

创建 COM 对象。

object.CreateObject(strProgID[,strPrefix])

参数

object
WScript 对象。
strProgID
表示要创建的对象的编程标识符 (ProgID) 的字符串值。
strPrefix
可选。表示函数前缀的字符串值。

说明

使用 strPrefix 参数，通过 CreateObject 方法创建的对象是已连接的对象。当您要同步对象的事件时，这些对象非常有用。创建对象后，该对象的输出接口将连接到脚本文件。事件函数由该前缀和事件名称组成。如果您创建对象时未提供 strPrefix 参数，则仍可通过 ConnectObject 方法同步发生在该对象上的事件。当对象引发事件时，WSH 将调用在事件名称开头附加了 strPrefix 的子例程。例如，如果 strPrefix 是 MYOBJ，对象引发的事件名为 OnBegin，则 Windows 脚本宿主将调用脚本中的 MYOBJ_OnBegin 子例程。CreateObject 方法返回一个指向该对象的 IDispatch 接口的指针。

示例

下面的 VBScript 代码使用 CreateObject 方法创建 WshNetwork 对象：

Set WshNetwork = WScript.CreateObject("WScript.Network")

请参阅

WScript 对象 | GetObject 方法 | ConnectObject 方法 | DisconnectObject 方法


CreateScript 方法

创建 WshRemote 对象。

object.CreateScript(CommandLine,[MachineName])

参数

object
WshController 对象。
Commandline
必需。表示脚本的路径和开关的字符串值（仿佛是从命令提示符处键入的一样）。脚本的路径看上去应象从控制器计算机系统（而不是要运行脚本的计算机系统）看到的那样。
MachineName
可选。表示远程计算机系统（要运行远程脚本的计算机）名称的字符串值。它是按照统一命名规则 (UNC) 规定的。

说明

CreateScript 方法返回 WshRemote 对象实例的句柄。脚本名中的路径部分未必是本地脚本 — 它可以引用网络共享上的脚本。这使您能坐在一个计算机系统旁，从另一个计算机系统检索脚本，然后在第三个计算机系统上运行它。如果未提供计算机名，远程脚本对象将在控制器计算机系统上运行（这是默认设置）。如果提供了计算机名，则远程脚本对象将运行于命名计算机系统之上。CreateScript 方法建立与远程计算机系统之间的连接，并对其进行设置以运行脚本，但是在您调用 WshRemote 对象的 Execute 方法之前，实际上不会启动脚本。

示例

下面的示例演示 WshController 对象的 CreateScript 方法如何用于创建 WshRemote 对象（远程脚本的实例）。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

WScript.DisconnectObject RemoteScript

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

WScript.DisconnectObject(RemoteScript);

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

请参阅

CreateObject 方法 | CreateScript 方法 | WshRemote 对象 | Execute 方法


CreateShortcut 方法

创建新的快捷方式，或打开现有的快捷方式。

object.CreateShortcut(strPathname)

参数

object
WshShell 对象。
strPathname
表示要创建的快捷方式的路径名的字符串值。

说明

CreateShortcut 方法返回 WshShortcut 对象或 WshURLShortcut 对象。只调用 CreateShortcut 方法并不会导致快捷方式的创建。快捷方式对象以及对其所做的更改存储在内存中，直到您用 Save 方法将其保存到磁盘中为止。要创建快捷方式，必须执行以下操作：

  1. 创建 WshShortcut 对象的实例。
  2. 初始化它的属性。
  3. 用 Save 方法将其保存到磁盘中。
    注意 一个常见的问题是，将参数放在快捷方式对象的 TargetPath 属性中将不起作用。快捷方式的所有参数都必须放在 Arguments 属性中。

示例

下面的示例创建 WshShell 对象并使用 CreateShortcut 方法创建两个快捷方式。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | WshShortcut 对象 | WshUrlShortcut 对象 | WshShell 对象


DisconnectObject 方法

断开已连接对象的事件源的连接。

object.DisconnectObject(obj)

参数

object
WScript 对象。
obj
表示要断开连接的对象名的字符串值。

说明

对象一旦被“断开连接”，WSH 将不会响应其事件。但是该对象仍能引发事件。注意，如果指定的对象还未连接，DisconnectObject 方法将不执行任何操作。

示例

下面的示例演示使用 DisconnectObject 方法在完成远程脚本之后断开 WshRemote对象连接的错误事件。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("test.js", "remoteserver")
WScript.ConnectObject RemoteScript, "remote_"
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop

WScript.DisconnectObject RemoteScript

Sub remote_Error
    Dim theError
    Set theError = RemoteScript.Error
    WScript.Echo "Error " & theError.Number & " - Line: " & theError.Line & ", Char: " & theError.Character & vbCrLf & "Description: " & theError.Description
    WScript.Quit -1
End Sub
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("test.js", "remoteserver");
WScript.ConnectObject(RemoteScript, "remote_");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

WScript.DisconnectObject(RemoteScript)

function remote_Error()
{
    var theError = RemoteScript.Error;
    WScript.Echo("Error " + theError.Number + " - Line: " + theError.Line + ", Char: " + theError.Character + "\nDescription: " + theError.Description);
    WScript.Quit(-1);
}

请参阅

WScript 对象 | ConnectObject 方法 | CreateObject 方法 | GetObject 方法


Echo 方法

将文本输出到消息框中或命令控制台窗口。

object.Echo [Arg1] [,Arg2] [,Arg3] ...

参数

object
WScript 对象。
Arg1、Arg2、Arg3 ...
可选。表示要显示的项的列表的字符串值。

说明

Echo 方法的运行方式取决于使用的 WSH 引擎。

WSH 引擎 | 文本输出
Wscript.exe | 图形消息框
Cscript.exe | 命令控制台窗口

显示的各项之间用空白字符隔开。如果使用 CScript.exe，则各项之间用换行符隔开。如果未向 Echo 方法提供任何作为参数的项，则输出一个空行。

示例

下面的示例使用 Echo 方法显示当前的域名、计算机名和用户名，并显示驱动器和打印机的网络映射信息。

<package>
<job id="vbs">
><script language="VBScript">
Set WshNetwork = WScript.CreateObject("WScript.Network")
Set oDrives = WshNetwork.EnumNetworkDrives
Set oPrinters = WshNetwork.EnumPrinterConnections
WScript.Echo "Domain = " & WshNetwork.UserDomain
WScript.Echo "Computer Name = " & WshNetwork.ComputerName
WScript.Echo "User Name = " & WshNetwork.UserName
WScript.Echo
WScript.Echo "Network drive mappings:"
For i = 0 to oDrives.Count - 1 Step 2
WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
Next
WScript.Echo
WScript.Echo "Network printer mappings:"
For i = 0 to oPrinters.Count - 1 Step 2
WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
Next
</script>
</job>

<job id="js">
<script language="JScript">
var WshNetwork = WScript.CreateObject("WScript.Network");
var oDrives = WshNetwork.EnumNetworkDrives();
var oPrinters = WshNetwork.EnumPrinterConnections();
WScript.Echo("Domain = " + WshNetwork.UserDomain);
WScript.Echo("Computer Name = " + WshNetwork.ComputerName);
WScript.Echo("User Name = " + WshNetwork.UserName);
WScript.Echo();
WScript.Echo("Network drive mappings:");
for(i=0; i<oDrives.Count(); i+=2){
WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i+1));
         }
WScript.Echo();
WScript.Echo("Network printer mappings:");
for(i=0; i<oPrinters.Count(); i+=2){
WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i+1));
         }
</script>
</job>
</package>

请参阅

运行脚本 | WScript 对象


EnumNetworkDrives 方法

返回当前的网络驱动器映射信息。

objDrives = object.EnumNetworkDrives

参数

object
WshNetwork 对象。
objDrives
用于存储网络驱动器映射信息的变量。

说明

EnumNetworkDrives 方法返回一个集合。该集合是一个数组，它将各个项对（网络驱动器的本地名称及其相关的 UNC 名称）关联在一起。集合中的偶数项表示逻辑驱动器的本地名称。奇数项表示与之相关的 UNC 共享名。集合中第一项的索引编号为零 (0)。

示例

下面的示例使用 EnumNetworkDrives 生成网络驱动器的列表，并显示映射信息。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         Set oDrives = WshNetwork.EnumNetworkDrives
         Set oPrinters = WshNetwork.EnumPrinterConnections
         WScript.Echo "Network drive mappings:"
         For i = 0 to oDrives.Count - 1 Step 2
            WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
         Next
         WScript.Echo
         WScript.Echo "Network printer mappings:"
         For i = 0 to oPrinters.Count - 1 Step 2
            WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
         Next
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         var oDrives = WshNetwork.EnumNetworkDrives();
         var oPrinters = WshNetwork.EnumPrinterConnections();
         WScript.Echo("Network drive mappings:");
         for(i = 0; i < oDrives.length; i += 2) {
            WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i + 1));
         }
         WScript.Echo();
         WScript.Echo("Network printer mappings:");
         for(i = 0; i < oPrinters.length; i += 2) {
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i + 1));
         }
      </script>
   </job>
</package>

请参阅

运行脚本 | WshNetwork 对象 | MapNetworkDrive 方法 | RemoveNetworkDrive 方法


EnumPrinterConnections 方法

返回当前网络打印机的映射信息。

objPrinters = object.EnumPrinterConnections

参数

object
WshNetwork 对象。
objPrinters
用于存储网络打印机映射信息的变量。

说明

EnumPrinterConnections 方法返回一个集合。该集合是一个数组，它将各个项对（网络打印机的本地名称及其相关的 UNC 名称）关联在一起。集合中的偶数项表示打印机的端口。奇数项则表示网络打印机的 UNC 名称。集合中第一项的索引编号为零 (0)。

示例

下面的示例使用 EnumPrinterConnections 方法生成网络打印机的列表，并显示映射信息。

<package>
   <job id="vbs">
      <script language="VBScript">
         Set WshNetwork = WScript.CreateObject("WScript.Network")
         Set oDrives = WshNetwork.EnumNetworkDrives
         Set oPrinters = WshNetwork.EnumPrinterConnections
         WScript.Echo "Network drive mappings:"
         For i = 0 to oDrives.Count - 1 Step 2
            WScript.Echo "Drive " & oDrives.Item(i) & " = " & oDrives.Item(i+1)
         Next
         WScript.Echo
         WScript.Echo "Network printer mappings:"
         For i = 0 to oPrinters.Count - 1 Step 2
            WScript.Echo "Port " & oPrinters.Item(i) & " = " & oPrinters.Item(i+1)
         Next
   </script>
</job>

   <job id="js">
      <script language="JScript">
         var WshNetwork = WScript.CreateObject("WScript.Network");
         var oDrives = WshNetwork.EnumNetworkDrives();
         var oPrinters = WshNetwork.EnumPrinterConnections();
         WScript.Echo("Network drive mappings:");
         for(i = 0; i < oDrives.length; i += 2) {
            WScript.Echo("Drive " + oDrives.Item(i) + " = " + oDrives.Item(i + 1));
         }
         WScript.Echo();
         WScript.Echo("Network printer mappings:");
         for(i = 0; i < oPrinters.length; i += 2) {
            WScript.Echo("Port " + oPrinters.Item(i) + " = " + oPrinters.Item(i + 1));
         }
      </script>
   </job>
</package>

请参阅

运行脚本 | WshNetwork 对象 | AddPrinterConnection 方法 | AddWindowsPrinterConnection 方法 | RemovePrinterConnection 方法 | SetDefaultPrinter 方法


Exec 方法

在子命令外壳程序中运行应用程序，提供对 StdIn/StdOut/StdErr 流的访问。

object.Exec(strCommand)

参数

object
WshShell 对象。
strCommand
表示用于运行脚本的命令行的字符串值。该命令行看上去和从命令提示符处键入完全一样。

说明

Exec 方法返回 WshScriptExec 对象，它提供有关用 Exec 运行的脚本状态和错误信息，还提供对 StdIn、StdOut 和 StdErr 频道的访问。Exec 方法只允许执行命令行应用程序。Exec 方法不能用于运行远程脚本。不要混淆 Exec 方法和 Execute 方法（后者属于 WshRemote 对象）。

示例

下面的示例演示 Exec 方法的基础。

[VBScript]
Dim WshShell, oExec
Set WshShell = CreateObject("WScript.Shell")

Set oExec = WshShell.Exec("calc")

Do While oExec.Status = 0
     WScript.Sleep 100
Loop

WScript.Echo oExec.Status
[JScript]
var WshShell = new ActiveXObject("WScript.Shell");
var oExec = WshShell.Exec("calc");

while (oExec.Status == 0)
{
     WScript.Sleep(100);
}

WScript.Echo(oExec.Status);

请参阅

WshScriptExec 对象


Execute 方法（Windows 脚本宿主）

Windows 脚本宿主

Execute 方法

开始执行远程脚本对象。

object.Execute

参数

object
WshRemote 对象

说明

WshRemote 对象的 Start 事件在脚本开始执行时引发。不要混淆 Execute 和 Exec 方法（后者属于 WScript 对象）。

示例

下面的示例演示 Execute 方法如何用于创建 WshRemote 对象（启动远程脚本的实例）。

[VBScript]
Dim Controller, RemoteScript
Set Controller = WScript.CreateObject("WSHController")
Set RemoteScript = Controller.CreateScript("remote1.js")
RemoteScript.Execute

Do While RemoteScript.Status <> 2
    WScript.Sleep 100
Loop
[JScript]
var Controller = WScript.CreateObject("WSHController");
var RemoteScript = Controller.CreateScript("remote1.js");
RemoteScript.Execute();

while (RemoteScript.Status != 2) {
    WScript.Sleep(100);
}

请参阅

WshController 对象 | WshRemote 对象 | Status 属性 | Error 属性 | Terminate 方法 | Start 事件 | End 事件


Exists 方法（Windows 脚本宿主）

Windows 脚本宿主

Exists 方法

表示某个键值是否存在于 WshNamed 对象中。

object.Exists(key)

参数

object
WshNamed 对象。
Key
表示 WshNamed 对象的参数的字符串值。

说明

Exists 方法返回布尔值。如果所需的参数是在命令行上指定的，则它返回 true（否则返回 false）。

示例

不妨在命令行中键入以下信息：

myScript.vbs /c:"WSH is a wonderful thing"

可以使用这两行 JScript 代码来查找以下命令行开关是否可用于启动脚本。

WScript.Echo(WScript.Arguments.Named.Exists("C"));
WScript.Echo(WScript.Arguments.Named.Exists("D"));

请参阅

Arguments 属性 | WshNamed 对象 | WshUnnamed 对象 | Count 方法 | Item 属性


ExpandEnvironmentStrings 方法

返回环境变量的扩展值。

object.ExpandEnvironmentStrings(strString)

参数

object
WshShell 对象。
strString
表示要扩展的环境变量名的字符串值。

说明

ExpandEnvironmentStrings 方法只扩展在 PROCESS 环境中定义的环境变量。环境变量名不区分大小写，其前后必须有 "%" 字符。

示例

下面的代码扩展 Windows Directory 环境变量，并在消息框中显示它。

[VBScript]
set WshShell = WScript.CreateObject("WScript.Shell")
WScript.Echo "WinDir is " & WshShell.ExpandEnvironmentStrings("%WinDir%")
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
WScript.Echo("WinDir is " + WshShell.ExpandEnvironmentStrings("%WinDir%"));

请参阅

WshShell 对象


GetObject 方法

用指定的 ProgID 检索现有的对象或从文件中创建新对象。

object.GetObject(strPathname [,strProgID], [strPrefix])

参数

object
WScript 对象。
strPathname
包含保留到磁盘中的对象的文件的完全限定路径名。
strProgID
可选。对象的程序标识符 (ProgID)。
strPrefix
可选。在要同步对象的事件时使用。如果您提供 strPrefix 参数，则 WSH 会在创建对象后将该对象的输出接口连接到脚本文件。

说明

如果对象的实例存储在内存中，或者您要从文件创建对象，则使用 GetObject 方法。如果内存中没有当前的实例，并且您不希望从文件创建对象，则请使用 CreateObject 方法。GetObject 方法可用于所有的 COM 类，而与用于创建对象的语言无关。如果您提供 strPrefix 参数，则 WSH 会在创建对象后将该对象的输出接口连接到脚本文件。当对象引发事件时，WSH 将调用在事件名称开头附加 strPrefix 的子例程。例如，如果 strPrefix 是 MYOBJ_，对象引发的事件名为 OnBegin，则 WSH 调用脚本中的 MYOBJ_OnBegin 子例程。

如果某个对象被注册为单实例对象，则只创建该对象的一个实例（无论您执行了多少次 GetObject，都是如此）。GetObject 方法返回的实例总是与用零长度字符串语法 ("") 调用的实例相同，如果未提供路径参数，则会发生错误。GetObject 方法不能用于获得对用 Visual Basic 4.0 或更低版本创建的 Microsoft Visual Basic 类的引用。

示例

下面的 VBScript 代码启动与指定的文件 (strPathname) 相关联的应用程序：

Dim MyObject As Object
Set MyObject = GetObject("C:\CAD\SCHEMA.CAD")
MyApp = MyObject.Application

某些应用程序允许您激活文件的一部分。为此，在文件名的结尾处添加一个感叹号 (!)，并在其后附加一个标识文件中要激活部分的字符串。例如，在绘图应用程序中，文件中存储的绘图可能有多层。下面的代码激活名为 SCHEMA.CAD 的绘图文件中的某一层：

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

如果未指定对象的类 (strProgID)，则 COM 确定要从该文件名启动的应用程序。某些文件可支持多个对象类。例如，某个绘图可能支持三个不同类型的对象：应用程序对象、绘图对象和工具栏对象。所有这些都可能在同一个文件中。

在下面的 VBScript 代码中，绘图应用程序 FIGMENT 从 SAMPLE.DRW 文件启动，并打开其中的 DRAWING 对象。

Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

请参阅

WScript 对象 | CreateObject 方法 | DisconnectObject 方法


getResource 方法

返回用 <resource> 元素定义的资源值。

getResource(resourceID)

参数

resourceID
唯一标识资源信息（包含在 *.WSF 脚本文件中的一组资源标记中）的字符串。

说明

getResource 方法返回一个字符串。使用 <resource> 元素隔离 .wsf 文件内的字符串或数字以及要引用的字符串或数字。该功能便于维护本地化为多种语言的一组字符串。WSH 脚本文件 (*.wsf) 可包含若干段不同的资源信息，每段信息都包含一个唯一的资源标识符。

示例

下面的 WSH 脚本定义名为 errNonNumeric 的资源。如果 upperBound 参数不是数字，则显示 errNonNumeric 的值。

<package>
<job id="JS">
<resource id="errNonNumeric">Error: A non-numeric value was entered where a number was expected.</resource>
<script language="JScript">

function getRandomNumber(upperBound)
{
   var realUpperBound = parseInt(upperBound);
   if (!isNaN(realUpperBound))
      return (realUpperBound * Math.random) + 1
   else
   {
      WScript.Echo(getResource("errNonNumeric"));
      WScript.Quit(-1);
   }
}

NewValue = getRandomNumber("Bad Value");

</script>
</job>

<job id="VBS">
<resource id="errNonNumeric">Error: A non-numeric value was entered where a number was expected.</resource>
<script language="VBScript">

Function getRandomNumber(upperBound)
   If IsNumeric(upperBound) Then
      getRandomNumber = CInt(upperBound * Rnd + 1)
   Else
      WScript.Echo getResource("errNonNumeric")
      WScript.Quit -1
   End If
End Function

NewValue = getRandomNumber("Bad Value")

</script>
</job>
</package>

请参阅

<resource> 元素


LogEvent 方法

将事件项添加到日志文件中。

object.LogEvent(intType, strMessage [,strTarget])

参数

object
WshShell 对象。
intType
表示事件类型的整数值。
strMessage
包含日志项文本的字符串值。
strTarget
可选。表示存储事件日志的计算机系统（默认情况下，是本地计算机系统）名称的字符串值。只适用于 Windows NT/2000。

说明

LogEvent 方法返回一个布尔值（如果事件记录成功，则返回 true，否则返回 false）。在 Windows NT/2000 中，事件记录在 Windows NT 事件日志中。在 Windows 9x/Me 中，事件记录在 WSH.log（位于 Windows 目录中）中。有六种事件类型。

类型 | 值
0 | SUCCESS
1 | ERROR
2 | WARNING
4 | INFORMATION
8 | AUDIT_SUCCESS
16 | AUDIT_FAILURE

示例

下面的代码记录“成功”或“错误”，这取决于 runLoginScript() 函数的输出。

[VBScript]
Set WshShell = WScript.CreateObject("WScript.Shell")
rc = runLoginScript()      'Returns true if logon succeeds.

if rc then
   WshShell.LogEvent 0, "Logon Script Completed Successfully"
else
   WshShell.LogEvent 1, "Logon Script failed"
end if
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var rc = runLoginScript();

if (rc)
   WshShell.LogEvent(0, "Logon Script Completed Successfully");
else
   WshShell.LogEvent(1, "Logon Script failed");

请参阅

WshShell 对象


MapNetworkDrive 方法

将共享网络驱动器添加到计算机系统中。

object.MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile], [strUser], [strPassword])

参数

object
WshNetwork 对象。
strLocalName
表示映射驱动器的本地名的字符串值。
strRemoteName
表示共享的 UNC 名称 (\\xxx\yyy) 的字符串值。
bUpdateProfile
可选。表示映射信息是否存储在当前的用户配置文件中的布尔值。如果提供的 bUpdateProfile 的值为 true，则该映射存储在用户的配置文件中（默认值为 false）。
strUser
可选。表示用户名的字符串值。如果使用当前用户以外的其他用户的凭据来映射网络驱动器，则必须提供该参数。
strPassword
可选。表示用户密码的字符串值。如果使用当前用户以外的其他用户的凭据来映射网络驱动器，则必须提供该参数。

说明

尝试映射非共享的网络驱动器时将产生错误。

示例

下面的代码用 UNC 名称 "\\Server\Public"，将逻辑驱动器 "E" 映射到网络共享位置。

[VBScript]
Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.MapNetworkDrive "E:", "\\Server\Public"
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
WshNetwork.MapNetworkDrive ("E:", "\\\\Server\\Public");

请参阅

WshNetwork 对象 | EnumNetworkDrives 方法 | RemoveNetworkDrive 方法


Popup 方法

在弹出式消息框中显示文本。

intButton = object.Popup(strText,[nSecondsToWait],[strTitle],[nType])

参数

object
WshShell 对象。
strText
包含要显示在弹出式消息框中的文本的字符串值。
nSecondsToWait
可选。表示弹出式消息框最长显示时间（秒）的数值。
strTitle
可选。包含要作为弹出式消息框的标题显示的文本的字符串值。
nType
可选。表示要显示在弹出式消息框中的按钮和图标类型的数值。这些类型确定消息框的使用方法。
IntButton
表示用户单击以解除消息框的按钮号的整数值。该值由 Popup 方法返回。

说明

无论主机可执行文件（WScript.exe 或 CScript.exe）是否运行，Popup 方法都显示一个消息框。如果 nSecondsToWaitis 等于零（默认值），弹出式消息框将保持可见，除非用户关闭它。如果 nSecondsToWaitis 大于零，则弹出式消息框在 nSecondsToWait 秒之后关闭。如果未提供参数 strTitle，则在默认情况下，弹出式消息框的标题为 "Windows Script Host"（Windows 脚本宿主）。nType 的含义与 Microsoft Win32® 应用程序编程接口的 MessageBox 函数的含义相同。下列各表显示这些值及其含义。您可组合这些表中的值。

注意 要以 RTL 语言（如希伯来语或阿拉伯语）正确地显示文本，请将十六进制的 hex &h00100000（十进制的 1048576）添加到 nType 参数中。

按钮类型

值 | 说明
0 | 显示“确定”按钮。
1 | 显示“确定”和“取消”按钮。
2 | 显示“放弃”、“重试”和“忽略”按钮。
3 | 显示“是”、“否”和“取消”按钮。
4 | 显示“是”和“否”按钮。
5 | 显示“重试”和“取消”按钮。

图标类型

值 | 说明
16 | 显示“停止标记”图标。
32 | 显示“问号”图标。
48 | 显示“感叹号”图标。
64 | 显示“信息标记”图标。

上面的两个表中并未涵盖 nType 的所有值。有关完整列表，请参阅 Microsoft Win32 文档。

返回值 intButton 表示用户单击按钮的次数。如果用户在 nSecondsToWait 秒之前未单击按钮，则 intButton 设为 –1。

值 | 说明
1 | “确定”按钮
2 | “取消”按钮
3 | “放弃”按钮
4 | “重试”按钮
5 | “忽略”按钮
6 | “是”按钮
7 | “否”按钮

示例

下面的代码生成简单的弹出式窗口。

[VBScript]
Dim WshShell, BtnCode
Set WshShell = WScript.CreateObject("WScript.Shell")

BtnCode = WshShell.Popup("Do you feel alright?", 7, "Answer This Question:", 4 + 32)

Select Case BtnCode
   case 6      WScript.Echo "Glad to hear you feel alright."
   case 7      WScript.Echo "Hope you're feeling better soon."
   case -1     WScript.Echo "Is there anybody out there?"
End Select
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var BtnCode = WshShell.Popup("Do you feel alright?", 7, "Answer This Question:", 4 + 32);
switch(BtnCode) {
   case 6:
      WScript.Echo("Glad to hear you feel alright.");
      break;
   case 7:
      WScript.Echo("Hope you're feeling better soon.");
      break;
   case -1:
      WScript.Echo("Is there anybody out there?");
      break;
}

请参阅

WshShell 对象 | Echo 方法


Quit 方法

强制脚本随时停止执行。

object.Quit([intErrorCode])

参数

object
WScript 对象。
intErrorCode
可选。作为过程的退出代码而返回的整数值。如果未包括 intErrorCode 参数，则不返回任何值。

说明

Quit 方法可返回可选的错误代码。如果 Quit 方法是脚本中最终的指令（并且您无需返回非零值），则可忽略它，脚本将正常终止。

示例

下面的 JScript 代码片段退出执行并返回错误代码 1：

WScript.Quit (1);

// 本行代码从不执行。
var i = 0;

请参阅

WScript 对象


Read 方法（Windows 脚本宿主）

Windows 脚本宿主

Read 方法

从输入流返回指定数量的字符。

object.Read(characters)

参数

object
StdIn 文本流对象。
characters
表示要读取的字符数的整数值。

说明

Read 方法返回一个字符串。StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。用 WScript.exe 运行脚本时返回错误。从当前的位置指针所在的位置开始读取并一次向前移动一个字符。

在按 enter 键之前，Read 方法不返回任何字符串。所返回的只是被请求的字符数。任何其他字符都将只在以后调用 Read、ReadLine 或 ReadAll 方法时返回。

示例

下面的代码使用 Read 方法从键盘获得字符，并在控制台显示。

[VBScript]
Dim Input
Input = ""

Do While Not WScript.StdIn.AtEndOfLine
   Input = Input & WScript.StdIn.Read(1)
Loop
WScript.Echo Input
[JScript]
var input = "";
while (!WScript.StdIn.AtEndOfLine)
{
   input += WScript.StdIn.Read(1);
}
WScript.Echo(input);

请参阅

StdIn 属性 (WScript)


ReadAll 方法（Windows 脚本宿主）

Windows 脚本宿主

ReadAll 方法

从输入流返回所有的字符。

object.ReadAll

参数

object
StdIn 文本流对象。

说明

ReadAll 方法返回一个字符串。StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。用 WScript.exe 运行脚本时返回错误。

示例

下面的代码演示 ReadAll 的用法。

[VBScript]
Dim Input
Input = ""

Do While Not WScript.StdIn.AtEndOfStream
   Input = Input & WScript.StdIn.ReadAll
Loop
WScript.Echo Input
[JScript]
var input = "";
while (!WScript.StdIn.AtEndOfStream)
{
   input += WScript.StdIn.ReadAll();
}
WScript.Echo(input);

请参阅

StdIn 属性 | FileSystemObject 对象


ReadLine 方法（Windows 脚本宿主）

Windows 脚本宿主

ReadLine 方法

从输入流返回整行。

object.ReadLine

参数

object
StdIn 文本流对象。

说明

ReadLine 方法返回一个字符串。StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。用 WScript.exe 运行脚本时返回错误。行是以换行符结尾的一系列字符。

注意 尽管该方法提取换行符，但它并不将换行符添加到字符串中。

示例

下面的代码演示 ReadLine 方法的用法。

[VBScript]
Dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Do While Not StdIn.AtEndOfStream
     str = StdIn.ReadLine
     StdOut.WriteLine "Line " & (StdIn.Line - 1) & ": " & str
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream)
{
     var str = stdin.ReadLine();
     stdout.WriteLine("Line " + (stdin.Line - 1) + ": " + str);
}

请参阅

StdIn 属性 | FileSystemObject 对象


RegDelete 方法

从注册表中删除项及其某个值。

object.RegDelete(strName)

参数

object
WshShell 对象。
strName
表示要删除的注册表项名或值名的字符串。

说明

通过用最后的反斜线终止 strName 来指定项名；停止它后指定值名。完全限定的项名和值名的前缀为根项。可以将缩写版本的根项名称用于 RegDelete 方法。下表中列出您可能用到的五个根项。

根项名 | 缩写
HKEY_CURRENT_USER | HKCU
HKEY_LOCAL_MACHINE | HKLM
HKEY_CLASSES_ROOT | HKCR
HKEY_USERS | HKEY_USERS
HKEY_CURRENT_CONFIG | HKEY_CURRENT_CONFIG

示例

下面的代码创建一个项和两个值，读取它们，然后删除它们。

[VBScript]
Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"

bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\")
WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader")

WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");

WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");

var bKey =    WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\");
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"));

WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader");
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\");
WshShell.RegDelete ("HKCU\\Software\\ACME\\");

请参阅

WshShell 对象 | RegRead 方法 | RegWrite 方法


RegRead 方法

从注册表中返回项值或值名。

object.RegRead(strName)

参数

object
WshShell 对象。
strName
表示所需的项名或值名的字符串值。

说明

RegRead 方法返回以下五种类型的值。

类型 | 说明 | 形式
REG_SZ | 字符串 | 字符串
REG_DWORD | 数字 | 整数
REG_BINARY | 二进制值 | 由整数组成的 VB 数组
REG_EXPAND_SZ | 可扩展的字符串（例如，"%windir%\\calc.exe"） | 字符串
REG_MULTI_SZ | 字符串数组 | 由字符串组成的 VB 数组

可通过用最后的反斜线终止 strName 来指定项名。指定值名时最后不要包括反斜线。值由三部分组成：名称、数据类型和值。指定项名（与值名相反）时，RegRead 返回默认值。要读取项的默认值，请指定项本身的名称。完全限定的项名和值名以根项开头。可以将缩写版本的根项名称用于 RegRead 方法。下表列出了五个可能的根项。

根项名 | 缩写
HKEY_CURRENT_USER | HKCU
HKEY_LOCAL_MACHINE | HKLM
HKEY_CLASSES_ROOT | HKCR
HKEY_USERS | HKEY_USERS
HKEY_CURRENT_CONFIG | HKEY_CURRENT_CONFIG

示例

下面的代码创建一个项和两个值，读取它们，然后删除它们。

[VBScript]
Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"

bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\")
WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader")

WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
[JScript]
var WshShell = WScript.CreateObject ("WScript.Shell");

WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");

var bKey =    WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\");
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"));

WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader");
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\");
WshShell.RegDelete ("HKCU\\Software\\ACME\\");

请参阅

WshShell 对象 | RegDelete 方法 | RegWrite 方法


RegWrite 方法

创建新项、将另一个值名添加到现有的项中（为其指派一个值），或更改现有值名的值。

object.RegWrite(strName, anyValue [,strType])

参数

object
WshShell 对象。
strName
表示要创建、添加或更改的项名、值名或值的字符串值。
anyValue
要创建的新项名称、要添加到现有项中的值名或要指派给现有值名的新值。
strType
可选。表示值的数据类型的字符串值。

说明

可通过用最后的反斜线终止 strName 来指定项名。指定值名时最后不要包括反斜线。RegWrite 方法自动将 anyValue 参数转换成字符串或整数。strType 的值确定它的数据类型（字符串或整数）。下表列出用于 strType 的选项。

转换成 | strType
字符串 | REG_SZ
字符串 | REG_EXPAND_SZ
整数 | REG_DWORD
字符串 | REG_BINARY
注意 RegWrite 方法不支持 REG_MULTI_SZ 类型。
提示 RegWrite 最多会将一个 DWORD 写入一个 REG_BINARY 值。该方法不支持 Larger 值。
完全限定的项名和值名的前缀为根项。可以将缩写版本的根项名称用于 RegWrite 方法。下表中列出了五个根项。
根项名 | 缩写
HKEY_CURRENT_USER | HKCU
HKEY_LOCAL_MACHINE | HKLM
HKEY_CLASSES_ROOT | HKCR
HKEY_USERS | HKEY_USERS
HKEY_CURRENT_CONFIG | HKEY_CURRENT_CONFIG

下表列出了用 strType 指定的四个可能的数据类型。

类型 | 说明 | 形式
REG_SZ | 字符串 | 字符串
REG_DWORD | 数字 | 整数
REG_BINARY | 二进制值 | 整数
REG_EXPAND_SZ | 可扩展的字符串（例如，"%windir%\\calc.exe"） | 字符串

示例

下面的代码创建一个项和两个值，读取它们，然后删除它们。

[VBScript]
Dim WshShell, bKey
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\", 1, "REG_BINARY"
WshShell.RegWrite "HKCU\Software\ACME\FortuneTeller\MindReader", "Goocher!", "REG_SZ"

bKey = WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\")
WScript.Echo WshShell.RegRead("HKCU\Software\ACME\FortuneTeller\MindReader")

WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\MindReader"
WshShell.RegDelete "HKCU\Software\ACME\FortuneTeller\"
WshShell.RegDelete "HKCU\Software\ACME\"
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");

WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");

var bKey =    WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\");
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"));

WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader");
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\");
WshShell.RegDelete ("HKCU\\Software\\ACME\\");

请参阅

WshShell 对象 | RegDelete 方法 | RegRead 方法


Remove 方法（Windows 脚本宿主）

Windows 脚本宿主

Remove 方法

删除现有的环境变量。

object.Remove(strName)

参数

object
WshEnvironment 对象。
strName
表示要删除的环境变量名的字符串值。

说明

Remove 方法从 PROCESS、USER、SYSTEM 和 VOLATILE 四种类型的环境中删除环境变量。用 Remove 方法删除的环境变量不会被永久删除；它们只是从当前的会话中删除。

示例

下面的代码删除 Process 环境变量 TestVar。

[VBScript]
Dim WshShell, WshEnv
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WshEnv = WshShell.Environment("PROCESS")
WshEnv("TestVar") = "Windows Script Host"
WScript.Echo WshShell.ExpandEnvironmentStrings("The value of the test variable is: '%TestVar%'")
WshEnv.Remove "TestVar"
WScript.Echo WshShell.ExpandEnvironmentStrings("The value of the test variable is: '%TestVar%'")
[JScript]
var WshShell = WScript.CreateObject("WScript.Shell");
var WshEnv = WshShell.Environment("PROCESS");
WshEnv("TestVar") = "Windows Script Host";
WScript.Echo(WshShell.ExpandEnvironmentStrings("The value of the test variable is: '%TestVar%'"));
WshEnv.Remove("TestVar");
WScript.Echo(WshShell.ExpandEnvironmentStrings("The value of the test variable is: '%TestVar%'"));

请参阅

WshEnvironment 对象 | Environment 属性


RemoveNetworkDrive 方法

从计算机系统中删除共享网络驱动器。

object.RemoveNetworkDrive(strName, [bForce], [bUpdateProfile])

参数

object
WshNetwork 对象。
strName
表示要删除的映射驱动器名的字符串值。strName 参数可以是本地名称，也可以是远程名称，这取决于驱动器的映射方法。
bForce
可选。表示是否强制删除映射驱动器的布尔值。如果提供的 bForce 的值为 true，则无论该资源是否正在使用，该方法都删除这些连接。
bUpdateProfile
可选。表示是否从用户的配置文件中删除映射的字符串值。如果提供 bUpdateProfile 且其值为 true，则从用户配置文件中删除该映射。bUpdateProfile 的默认值为 false。

说明

如果在本地名称（驱动器名）和远程名称（UNC 名称）之间存在映射关系，则 strName 必须设置为本地名称。如网络路径中不存在本地名称（驱动器字母）映射，则 strName 必须设为远程名称。

示例

下面的代码将删除本地驱动器 "E"。

[VBScript]
Dim WshNetwork
Set WshNetwork = WScript.CreateObject("WScript.Network")
WshNetwork.RemoveNetworkDrive "E:"
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
WshNetwork.RemoveNetworkDrive ("E:");

请参阅

WshNetwork 对象 | EnumNetworkDrives 方法 | MapNetworkDrive 方法


RemovePrinterConnection 方法

从计算机系统中删除共享网络打印机连接。

object.RemovePrinterConnection(strName, [bForce], [bUpdateProfile])

参数

object
WshNetwork 对象。
strName
表示用于标识打印机名称的字符串值。它可以是 UNC 名称（其格式为 \\xxx\yyy），也可以是本地名称（如 LPT1）。
bForce
可选。表示是否强制删除映射打印机的布尔值。如果设为 true（默认值为 false），则无论用户是否连接到该打印机，都将删除打印机连接。
bUpdateProfile
可选。布尔值。如果设为 true（默认值为 false），则更改将保存在用户的配置文件中。

说明

RemovePrinterConnection 方法删除基于 Windows 和基于 MS-DOS 的打印机连接。如果使用 AddPrinterConnection 方法连接打印机，则 strName 必须是打印机的本地名称。如果使用 AddWindowsPrinterConnection 方法连接打印机，或者手动添加（使用“添加打印机”向导），则 strName 必须为打印机的 UNC 名称。

示例

下面的代码断开网络打印机的连接。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\printserv\DefaultPrinter"
WshNetwork.RemovePrinterConnection PrinterPath, true, true
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
var PrinterPath = "\\\\PRN-CORP1\\B41-4523-A";
WshNetwork.RemovePrinterConnection(PrinterPath, true, true);

请参阅

WshNetwork 对象 | AddPrinterConnection 方法 | AddWindowsPrinterConnection 方法 | EnumPrinterConnections 方法 | SetDefaultPrinter 方法


Run 方法

在新过程中运行程序。

object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

参数

object
WshShell 对象。
strCommand
表示要运行的命令行的字符串值。必须包括要传递到可执行文件的所有参数。
intWindowStyle
可选。表示程序窗口外观的整数值。请注意，并非所有程序都使用此信息。
bWaitOnReturn
可选。布尔值，表示在继续执行脚本中的下一条语句之前，脚本是否等待执行完程序。如果设为 true，则在执行完程序后才执行脚本，Run 方法返回由程序返回的任何错误代码。如果设为 false（默认值），则 Run 方法将自动在启动程序后立即返回 0（不是错误代码）。

说明

Run 方法返回一个整数。Run 方法启动在新 Windows 进程中运行的程序。可以让脚本等到程序执行完后再继续执行。这允许您同步运行脚本和程序。strCommand 参数内的环境变量自动扩展。如果某个文件类型已正确注册到某个程序中，则对该类型的文件调用 Run 方法时将执行该程序。例如，如果您的计算机系统中装有 Word，则对 *.doc 文件调用 Run 方法时将启动 Word 并加载该文档。下表列出了 intWindowStyle 的可用设置。

intWindowStyle | 说明
0 | 隐藏一个窗口并激活另一个窗口。
1 | 激活并显示窗口。如果窗口处于最小化或最大化状态，则系统将其还原到原始大小和位置。第一次显示该窗口时，应用程序应指定此标志。
2 | 激活窗口并将其显示为最小化窗口。
3 | 激活窗口并将其显示为最大化窗口。
4 | 按最近的窗口大小和位置显示窗口。活动窗口保持活动状态。
5 | 激活窗口并按当前的大小和位置显示它。
6 | 最小化指定的窗口，并按照 Z 顺序激活下一个顶部窗口。
7 | 将窗口显示为最小化窗口。活动窗口保持活动状态。
8 | 将窗口显示为当前状态。活动窗口保持活动状态。
9 | 激活并显示窗口。如果窗口处于最小化或最大化状态，则系统将其还原到原始大小和位置。还原最小化窗口时，应用程序应指定此标志。
10 | 根据启动应用程序的程序状态来设置显示状态。

示例 1

下面的 VBScript 代码用记事本打开当前运行脚本的副本。

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "%windir%\notepad " & WScript.ScriptFullName

下面的 VBScript 代码与上述代码完成的操作相同，不同之处在于，它指定窗口类型，等待用户关闭记事本，关闭记事本时保存从记事本返回的错误代码。

Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("notepad " & WScript.ScriptFullName, 1, true)

示例 2

下面的 VBScript 代码打开一个命令窗口，将路径改为 C:\，并执行 DIR 命令。

Dim oShell
Set oShell = WScript.CreateObject ("WSCript.shell")
oShell.run "cmd /K CD C:\ & Dir"
Set oShell = Nothing

请参阅

WshShell 对象


Save 方法

将快捷方式对象保存到磁盘中。

object.Save

参数

object
WshShortcut 或 WshUrlShortcut 对象。

说明

使用 CreateShortcut 方法创建快捷方式对象并设置快捷方式对象的属性后，必须用 Save 方法将快捷方式对象保存到磁盘中。Save 方法使用快捷方式对象的 FullName 属性中的信息，确定快捷方式对象在磁盘上的保存位置。只可创建系统对象的快捷方式，包括文件、目录和驱动器（不包括打印机链接或调度任务）。

示例

下面的示例演示如何将一个 .wsf 文件用于以不同脚本语言（VBScript 和 Jscript）写成的两个作业。每个作业都创建正在运行脚本的快捷方式，并创建 www.microsoft.com 的 URL 快捷方式。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         strDesktop = WshShell.SpecialFolders("Desktop")
         set oShellLink = WshShell.CreateShortcut(strDesktop & "\Shortcut Script.lnk")
         oShellLink.TargetPath = WScript.ScriptFullName
         oShellLink.WindowStyle = 1
         oShellLink.Hotkey = "CTRL+SHIFT+F"
         oShellLink.IconLocation = "notepad.exe, 0"
         oShellLink.Description = "Shortcut Script"
         oShellLink.WorkingDirectory = strDesktop
         oShellLink.Save
         set oUrlLink = WshShell.CreateShortcut(strDesktop & "\Microsoft Web Site.url")
         oUrlLink.TargetPath = "http://www.microsoft.com/china"
         oUrlLink.Save
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         strDesktop = WshShell.SpecialFolders("Desktop");
         var oShellLink = WshShell.CreateShortcut(strDesktop + "\\Shortcut Script.lnk");
         oShellLink.TargetPath = WScript.ScriptFullName;
         oShellLink.WindowStyle = 1;
         oShellLink.Hotkey = "CTRL+SHIFT+F";
         oShellLink.IconLocation = "notepad.exe, 0";
         oShellLink.Description = "Shortcut Script";
         oShellLink.WorkingDirectory = strDesktop;
         oShellLink.Save();
         var oUrlLink = WshShell.CreateShortcut(strDesktop + "\\Microsoft Web Site.url");
         oUrlLink.TargetPath = "http://www.microsoft.com/china";
         oUrlLink.Save();
      </script>
   </job>
</package>

请参阅

运行脚本 | WshShortcut 对象 | WshUrlShortcut 对象 | FullName 属性 | TargetPath 属性 | WindowStyle 属性 | Hotkey 属性 | IconLocation 属性 | Description 属性 | WorkingDirectory 属性


SendKeys 方法

将一个或多个键击发送到活动窗口（仿佛是在键盘上击键一样）。

object.SendKeys(string)

参数

object
WshShell 对象。
string
表示要发送的键击（一个或多个）的字符串值。

说明

使用 SendKeys 方法可以将键击发送到无自动化界面的应用程序中。多数键盘字符都可用一个键击表示。某些键盘字符由多个键击组合而成（例如，CTRL+SHIFT+HOME）。要发送单个键盘字符，请将字符本身作为 string 参数发送。例如，要发送字母 x，则请发送 string 参数 "x"。

注意 要发送空格，则请发送字符串 " "。

可使用 SendKeys 同时发送多个键击。为此，可将每个键击按顺序排列在一起，以此来创建表示一系列键击的复合字符串参数。例如，要发送键击 a、b 和 c，则需要发送字符串参数 "abc"。SendKeys 方法将某些字符用作字符的修饰符（而不使用其本身的含义）。这组特殊的字符可包括圆括号、中括号、大括号，以及：

  • 加号 "+"、
  • 插入记号 "^"、
  • 百分号 "%"、
  • 和“非”符号 "~"。

用大括号 "{}" 括起这些字符可以发送它们。例如，要发送加号，请使用字符串参数 "{+}"。SendKeys中使用的中括号 "[ ]" 无任何特殊含义，但是必须把它们括在大括号中，以便容纳确实要赋予其特殊含义的应用程序（例如，对于动态数据交换 (DDE) 就是这样）。

  • 要发送左中括号字符，请发送字符串参数 "{[]"；要发送右中括号字符，请发送字符串参数 "{]}"。
  • 要发送左大括号字符，请发送字符串参数 "{{}"；要发送右大括号字符，请发送字符串参数 "{}}"。

某些键击不生成字符（如 ENTER 和 TAB）。某些键击表示操作（如 BACKSPACE 和 BREAK）。要发送这些类型的键击，请发送下表中列出的参数：

键 | 参数
退格键 | {BACKSPACE}、{BS} 或 {BKSP}
BREAK | {BREAK}
CAPS LOCK | {CAPSLOCK}
DEL 或 DELETE | {DELETE} 或 {DEL}
向下键 | {DOWN}
END | {END}
ENTER | {ENTER} 或 ~
ESC | {ESC}
HELP | {HELP}
HOME | {HOME}
INS 或 INSERT | {INSERT} 或 {INS}
向左键 | {LEFT}
NUM LOCK | {NUMLOCK}
PAGE DOWN | {PGDN}
PAGE UP | {PGUP}
PRINT SCREEN | {PRTSC}
向右键 | {RIGHT}
SCROLL LOCK | {SCROLLLOCK}
TAB | {TAB}
向上键 | {UP}
F1 | {F1}
F2 | {F2}
F3 | {F3}
F4 | {F4}
F5 | {F5}
F6 | {F6}
F7 | {F7}
F8 | {F8}
F9 | {F9}
F10 | {F10}
F11 | {F11}
F12 | {F12}
F13 | {F13}
F14 | {F14}
F15 | {F15}
F16 | {F16}

要发送由常规键击和 SHIFT、CTRL 或 ALT 组合而成的键盘字符，请创建表示该键击组合的复合字符串参数。可通过在常规键击之前添加一个或多个以下特殊字符来完成上述操作：

键 | 特殊字符
SHIFT | +
CTRL | ^
ALT | %
注意 这样使用时，不用大括号括起这些特殊字符。

要指定在按下多个其他键时，按下 SHIFT、CTRL 和 ALT 的组合，请创建复合字符串参数，用括号括起其中的组合键。例如，要发送的组合键指定：

  • 如果在按 e 和 c 的同时按 SHIFT 键，则发送字符串参数 "+(ec)"。
  • 如果在按 e 时只按 c（而不按 SHIFT），则发送字符串参数 "+ec"。

可使用 SendKeys 方法发送一种在一行内重复按键的键击。为此，要创建复合字符串参数，以指定要重复的键击，并在其后指定重复次数。可使用 {键击 数字} 形式的复合字符串参数来完成上述操作。例如，如果要发送 10 次 "x"，则需要发送字符串参数 "{x 10}"。请确保在键击和数字之间有一个空格。

注意 只可以发送重复按一个键的键击。例如，可以发送 10 次 "x"，但不可发送 10 次 "Ctrl+x"。
注意 不能向应用程序发送 PRINT SCREEN 键 {PRTSC}。

示例

下面的示例演示如何将一个 .wsf 文件用于以不同脚本语言（VBScript 和 Jscript）写成的两个作业。每个作业都运行 Windows 计算器并将它发送给键击以执行简单的计算。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         WshShell.Run "calc"
         WScript.Sleep 100
         WshShell.AppActivate "Calculator"
         WScript.Sleep 100
         WshShell.SendKeys "1{+}"
         WScript.Sleep 500
         WshShell.SendKeys "2"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 500
         WshShell.SendKeys "*3"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 2500
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         WshShell.Run("calc");
         WScript.Sleep(100);
         WshShell.AppActivate("Calculator");
         WScript.Sleep(100);
         WshShell.SendKeys ("1{+}");
         WScript.Sleep(500);
         WshShell.SendKeys("2");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(500);
         WshShell.SendKeys("*3");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(2500);
      </script>
   </job>
</package>

请参阅

WshShell 对象 | Run 方法


SetDefaultPrinter 方法

为远程打印机指派角色“默认打印机”。

object.SetDefaultPrinter(strPrinterName)

参数

object
WshNetwork 对象。
strPrinterName
表示远程打印机的 UNC 名称的字符串值。

说明

使用基于 DOS 的打印机连接时，SetDefaultPrinter 方法失败。不能使用 SetDefaultPrinter 方法确定当前默认打印机的名称。

示例

下面的代码使用 AddWindowsPrinterConnection 方法连接网络打印机，并将它设为默认打印机。

[VBScript]
Set WshNetwork = WScript.CreateObject("WScript.Network")
PrinterPath = "\\research\library1"
WshNetwork.AddWindowsPrinterConnection PrinterPath
WshNetwork.SetDefaultPrinter PrinterPath
[JScript]
var WshNetwork = WScript.CreateObject("WScript.Network");
var PrinterPath = "\\\\research\\library1";
WshNetwork.AddWindowsPrinterConnection(PrinterPath);
WshNetwork.SetDefaultPrinter(PrinterPath);

请参阅

WshNetwork 对象 | AddPrinterConnection 方法 | AddWindowsPrinterConnection 方法 | EnumPrinterConnections 方法 | RemovePrinterConnection 方法


ShowUsage 方法

通过显示脚本的使用方法使脚本具有自我说明性。

object.ShowUsage

参数

object
WScript 对象。

说明

运行 ShowUsage 方法时，将出现帮助屏幕（称为用法），并显示有关脚本命令行选项的详细信息。该信息来自 *.WSF 文件的运行时部分。在 <runtime> 和 </runtime> 标记之间编写的任何语句都将组合起来，以便生成所谓的“用法语句”。用法语句告诉用户如何使用脚本。

注意 还可使用 /? 开关显示用法。

示例

下面的示例演示如何在 *.WSF 脚本文件中设置用法信息。

<job>
    <runtime>
        <description>This script reboots a server</description>
        <named
            name = "Server"
            helpstring = "Server to run the script on"
            type = "string"
            required = "true"
        />
        <example>Example: reboot.wsf /server:scripting</example>
    </runtime>
<script language="VBScript">

If WScript.Arguments.Count <> 1 Then
   WScript.Arguments.ShowUsage
   WScript.Quit
End If

</script>
</job>

相应的 Jscript 脚本代码块为：

if (WScript.Arguments.length != 1)
{
   WScript.Arguments.ShowUsage();
   WScript.Quit();
}

从该脚本中调用 ShowUsage 方法将生成下列输出：

This script reboots a server
Usage: reboot.wsf /server:value

Options:

server : Server to run the script on
Example:
reboot.wsf /server:scripting

请参阅

WScript 对象


Sign 方法

对以字符串形式存储的脚本进行签名。

Object.Sign (FileExtension，Text，Certificate，Store)

参数

object
Scripting.Signer
FileExtension
指定脚本扩展名类型（.vbs、.js 或 .wsf）的字符串。它提供了一种机制，供操作系统确定所验证的脚本文件的类型。
Text
包含要签名的脚本的字符串。
Certificate
指定作者的证书名称的字符串。
Store
可选。指定证书存储名称的字符串。通常，包含私钥的证书（即可以用于代码签名的证书）处于称为 "my" 的证书存储中。默认值为 "my"。

说明

Sign 方法用于对以字符串形式存储的脚本进行数字签名。为了创建数字签名，调用方必须具有有效的证书。

示例

Dim Signer，UnsignedText，SignedText
Set Signer = CreateObject("Scripting.Signer")
UnsignedText = _
"Dim X " & vbCrLf & _
"X = 123" & vbCrLf & _
"WScript.Echo X" & vbCrLf
SignedText = Signer.Sign(".VBS"，UnsignedText，"Your Certificate Name Here")

请参阅

Scripting.Signer 对象 | SignFile 方法 | Verify 方法 | VerifyFile 方法 | 对脚本进行签名


SignFile 方法

使用数字签名对脚本进行签名。

Object.SignFile (FileName，Certificate，Store)

参数

object
Scripting.Signer
FileName
包含脚本文件名的字符串。
Certificate
指定作者的证书名称的字符串。
Store
指定证书存储名称的可选字符串。通常，包含私钥的证书（即可以用于代码签名的证书）处于称为 "my" 的证书存储中。默认值为 "my"。

说明

为了进行数字签名，作者必须具有有效的证书。

示例

下面的示例不仅演示签名检查，而且演示命令行参数。

<job>
<runtime>
<named name="file" helpstring="the file to sign" required="true" type="string"/>
<named name="cert" helpstring="the name of the signing certificate" required="true" type="string"/>
<named name="store" helpstring="the name of the certificate store" required="false" type="string"/>
</runtime>
<script language="vbscript">
Dim Signer，File，Cert，Store
If Not (WScript.Arguments.Named.Exists("cert") And WScript.Arguments.Named.Exists("file")) Then
WScript.Arguments.ShowUsage
WScript.Quit
End If
Set Signer = CreateObject("Scripting.Signer")
File  = WScript.Arguments.Named("file")
Cert  = WScript.Arguments.Named("cert")
If WScript.Arguments.Named.Exists("store") Then
Store = WScript.Arguments.Named("store")
Else
Store = "my"
End If
Signer.SignFile File，Cert，Store
</script>
</job>

See Also

Scripting.Signer 对象 | Sign 方法 | Verify 方法 | VerifyFile 方法 | 对脚本进行签名


Skip 方法（Windows 脚本宿主）

Windows 脚本宿主

Skip 方法

从输入文本流中读取字符时，跳过指定数量的字符。

object.Skip(characters)

参数

object
StdIn 文本流对象。
characters
表示要跳过的字符数的整数值。

说明

StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。用 WScript.exe 运行脚本时将返回 "Invalid Handle"（句柄无效）错误。位置指针向前移动 characters 参数中指定的字符（字节）数。不能使用 Skip 方法在文件中向后跳过字符（不支持负字符数）。Skip 方法只限于在读取模式下打开文件（在向输出流写入时，不能跳过指定数量的字符）。

示例

下面的代码使用 Skip 方法跳过文本流中的第一个字符，从键盘读取字符，并将它写入 StdOut 文本流。

[VBScript]
WScript.StdIn.Skip 1
Input = WScript.StdIn.ReadLine
WScript.StdOut.Write Input
[JScript]
WScript.StdIn.Skip(1);
Input = WScript.StdIn.ReadLine();
WScript.StdOut.Write(Input);

请参阅

StdIn 属性


SkipLine 方法（Windows 脚本宿主）

Windows 脚本宿主

SkipLine 方法

从输入文本流中读取时跳过下一行。

object.SkipLine

参数

object
StdIn 文本流对象。

说明

行是以换行符结尾的一系列字符。StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。用 WScript.exe 运行脚本时将返回 "Invalid Handle"（句柄无效）错误。位置指针向前移动到下一个换行符后面的点。不能使用 SkipLine 方法在文件中向后跳过行。SkipLine 方法只限于在读取模式下打开文件（在向输出流写入时，不能跳过行）。

示例

下面的代码演示 SkipLine 方法。

[VBScript]
Dim StdIn, StdOut, Str1, Str2

Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Str1 = ""
Str2 = ""

For i = 0 to 4
   StdIn.SkipLine
Next

i = 0
Do While Not StdIn.AtEndOfStream
     If i >= 2 Then
          StdOut.WriteLine Str1
     End If
     i = i + 1
     Str1 = Str2
     Str2 = StdIn.ReadLine
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;
var str1, str2 = "";
var i;
for (i = 0; i < 5; i++)
     stdin.SkipLine();
i = 0;
while (!stdin.AtEndOfStream)
{
     if (i++ >= 2)
     {
          stdout.WriteLine(str1);
     }
     str1 = str2;
     str2 = stdin.ReadLine();
}

请参阅

StdIn 属性


Sleep 方法

在指定的时间长度内将脚本执行挂起，然后继续执行。

object.Sleep(intTime)

参数

object
WScript 对象。
intTime
表示脚本过程处于不活动状态的时间间隔（毫秒）的整数值。

说明

运行脚本的线程被挂起，释放它所占用的 CPU。超过指定的时间间隔后，脚本继续执行。如果您运行异步操作和多过程，或者您的脚本中包括由事件触发的代码，Sleep 方法就尤其有用。要由事件触发脚本，则脚本必须始终处于活动状态（已执行完的脚本肯定检测不到事件）。脚本所处理的事件仍将在休眠阶段执行。

注意 赋予 Sleep 方法 0 或 –1 不一定会导致脚本挂起。

示例

下面的示例演示如何将一个 .wsf 文件用于以不同脚本语言（VBScript 和 Jscript）写成的两个作业。两个作业的功能相同 — 每个作业都运行 Windows 计算器并将它发送给键击以执行简单的计算。

<package>
   <job id="vbs">
      <script language="VBScript">
         set WshShell = WScript.CreateObject("WScript.Shell")
         WshShell.Run "calc"
         WScript.Sleep 100
         WshShell.AppActivate "Calculator"
         WScript.Sleep 100
         WshShell.SendKeys "1{+}"
         WScript.Sleep 500
         WshShell.SendKeys "2"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 500
         WshShell.SendKeys "*3"
         WScript.Sleep 500
         WshShell.SendKeys "~"
         WScript.Sleep 2500
      </script>
   </job>

   <job id="js">
      <script language="JScript">
         var WshShell = WScript.CreateObject("WScript.Shell");
         WshShell.Run("calc");
         WScript.Sleep(100);
         WshShell.AppActivate("Calculator");
         WScript.Sleep(100);
         WshShell.SendKeys("1{+}");
         WScript.Sleep(500);
         WshShell.SendKeys("2");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(500);
         WshShell.SendKeys("*3");
         WScript.Sleep(500);
         WshShell.SendKeys("~");
         WScript.Sleep(2500);
      </script>
   </job>
</package>

请参阅

运行脚本 | WScript 对象


Terminate 方法 (WshScriptExec)

命令脚本引擎终止由 Exec 方法启动的进程。

object.Terminate

参数

object
WshScriptExec 对象。

说明

Terminate 方法不返回任何值。因为某些应用程序不能正确地清除，所以请在万不得已的情况下再使用 Terminate。一般情况下，让进程自行运行和终止。Terminate 方法尝试使用 WM_CLOSE 消息终止过程。如果不能奏效，它将立即关闭该进程，而无需经历正常的关闭过程。

示例

下面的 JScript 示例演示如何使用 Terminate 方法终止脚本的运行。

var aScript = WScript.Exec("%comspec% /c myScript.js");
aScript.Terminate();

请参阅

WshScriptExec 对象


Verify 方法

对检索到的字符串形式的数字签名进行验证。

object.Verify (FileExtension，Text，ShowUI)

参数

object
Scripting.Signer
FileExtension
指定脚本扩展名类型（.vbs、.js 或 .wsf）的字符串。它提供了一种机制，供操作系统确定所验证的脚本文件的类型。
Text
要验证的文本。
ShowUI
布尔值。如果 ShowUI 参数为 false，则 Scripting.Signer 对象确定可信源是否在不提示用户的情况下提供签名。如果该参数为 true，则在信息不足以确定是否可信时，Scripting.Signer 对象创建提示用户的对话框。
注意 在某些操作系统上，如果标志显示出来，文件可信，而且您还未选中“总是信任...”选项，则操作系统也会创建一个对话框。

说明

Verify 方法用于验证以字符串形式存储的数字签名的脚本。

示例

在下面的示例中，Verify 方法确定 UnsignedText 变量中的脚本是否可信。（由于本示例中没有数字签名，因此 Scripting.Signer 对象询问用户是否要扩展信任。）

Dim Signer，UnsignedText，Trusted
Set Signer = CreateObject("Scripting.Signer")
UnsignedText = _
"Dim X " & vbCrLf & _
"X = 123" & vbCrLf & _
"WScript.Echo X" & vbCrLf
Trusted = Signer.Verify(".VBS"，UnsignedText，True)

请参阅

Scripting.Signer 对象 | VerifyFile 方法 | Sign 方法 | SignFile 方法 | 验证脚本


VerifyFile 方法

对封装在脚本中的数字签名进行验证。

Object.VerifyFile (FileName，ShowUI)

参数

object
Scripting.Signer
FileName
包含脚本文件名的字符串。
ShowUI
一个 Boolean 值。如果 ShowUI 参数为 false，则 Scripting.Signer 对象确定可信源是否在不提示用户的情况下提供签名。如果该参数为 true，则在信息不足以确定是否可信时，Scripting.Signer 对象创建提示用户的对话框。
注意 在某些操作系统上，如果标志显示出来，文件可信，而且您还未选中“总是信任...”选项，则操作系统也会创建一个对话框。

示例

下面的示例将演示如何使用命令行参数处理功能来进行签名检查。

<job>
<runtime>
<named name="file" helpstring="the file to sign" required="true" type="string"/>
<named name="UI" helpstring="produce user interface for untrusted scripts" required="false"/>
</runtime>
<script language="vbscript">
Dim Signer，File，UI，OK
If Not WScript.Arguments.Named.Exists("file") Then
WScript.Arguments.ShowUsage
WScript.Quit
End If
Set Signer = CreateObject("Scripting.Signer")
File = WScript.Arguments.Named("file")
UI   = WScript.Arguments.Named.Exists("ui")
OK = Signer.VerifyFile(File，UI)
If OK Then
WScript.Echo File & " is trusted."
Else
WScript.Echo File & " is NOT trusted."
End If
</script>
</job>

请参阅

Scripting.Signer 对象 | Verify 方法 | Sign 方法 | SignFile 方法 | 验证脚本


Write 方法（Windows 脚本宿主）

Windows 脚本宿主

Write 方法

向输出流发送字符串。

object.Write(strText)

参数

object
StdOut 或 StdErr 文本流对象。
strText
表示要写入流的文本的字符串值。

说明

StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。用 WScript.exe 运行脚本时将返回 "Invalid Handle"（句柄无效）错误。位置指针移到 strText 中最后一个字符后边的位置。

示例

下面的代码演示 Write 方法的用法。

[VBScript]
Dim strInput
strInput = WScript.StdIn.ReadAll
WScript.StdOut.Write strInput
[JScript]
var strInput = WScript.StdIn.ReadAll();
WScript.StdOut.Write(strInput);

请参阅

StdErr 属性 | StdOut 属性


WriteBlankLines 方法（Windows 脚本宿主）

Windows 脚本宿主

WriteBlankLines 方法

向输出流发送指定数量的空行（换行符）。

object.WriteBlankLines(intLines)

参数

object
StdOut 或 StdErr 文本流对象。
intLines
表示要写入流的空行数的整数值。

说明

在不提供 strText 参数的情况下调用 WriteLine 方法等同于调用 WriteBlankLines(1)。StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。用 WScript.exe 执行脚本时将返回 "Invalid Handle"（句柄无效）错误。

示例

下面的代码演示 WriteBlankLines 方法。

[VBScript]
Dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Do While Not StdIn.AtEndOfStream
     str = StdIn.ReadLine
     StdOut.Write "Line " & (StdIn.Line - 1) & ": " & str
     StdOut.WriteBlankLines 1
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream)
{
     var str = stdin.ReadLine();
     stdout.Write("Line " + (stdin.Line - 1) + ": " + str);
     stdout.WriteBlankLines(1);
}

请参阅

StdErr 属性 | StdOut 属性 | WriteLine 方法


WriteLine 方法（Windows 脚本宿主）

Windows 脚本宿主

WriteLine 方法

向输出流发送包含换行符的字符串。

object.WriteLine([strText])

参数

object
StdOut 或 StdErr 文本流对象。
strText
可选。表示要写入流的文本的字符串值。如果省略该参数，则向输出流写入换行符。

说明

WriteLine 方法总是在字符串后面附加换行符。在不提供 strText 参数的情况下调用 WriteLine 方法等同于调用 WriteBlankLines(1)。StdIn、StdOut 和 StdErr 属性与方法只在用 CScript.exe 主机可执行文件运行脚本时奏效。用 WScript.exe 运行脚本时将返回 "Invalid Handle"（句柄无效）错误。行是由以换行符结尾的一系列字符串。

示例

下面的代码演示 WriteLine 方法的用法。

[VBScript]
Dim StdIn, StdOut
Set StdIn = WScript.StdIn
Set StdOut = WScript.StdOut

Do While Not StdIn.AtEndOfStream
     str = StdIn.ReadLine
     StdOut.WriteLine "Line " & (StdIn.Line - 1) & ": " & str
Loop
[JScript]
var stdin = WScript.StdIn;
var stdout = WScript.StdOut;

while (!stdin.AtEndOfStream)
{
     var str = stdin.ReadLine();
     stdout.WriteLine("Line " + (stdin.Line - 1) + ": " + str);
}

请参阅

StdErr 属性 | StdOut 属性 | WriteBlankLines 方法


事件（Windows 脚本宿主）

Windows 脚本宿主

事件

本节内容

End 事件
向脚本引擎发出终止执行远程脚本对象的信号。
Error 事件
当远程脚本因出错而提前终止时，向脚本引擎发出终止执行远程脚本对象的信号。
Start 事件
向脚本引擎发出开始执行远程脚本对象的信号。

相关章节

WSH 参考
组成 WSH 参考的元素列表。
WSH 基础
了解 WSH 的基本概念。


End 事件

该事件在远程脚本完成时引发。

Object_end

参数

object
WshRemote 对象。

说明

End 事件在远程脚本对象执行完毕时引发。可以在远程脚本对象正常终止、超时或是因发生错误而终止时引发。

示例

var WshController = new ActiveXObject("WSHController");
var RemoteProc = WshController.CreateScript("foo.wsf", "remotemachine");
WScript.ConnectObject(RemoteProc, "RemoteProc_");
var Done = false;
RemoteProc.Execute();
while (!Done)
   WScript.Sleep(100);

function RemoteProc_End()
{
   WScript.Echo("The process has ended");
   Done = true;
}

function RemoteProc_Error()
{
   WScript.Echo("An error has occurred:" + RemoteProc.Error.Description);
   Done = true;
}

function RemoteProc_Start()
{
   WScript.Echo("The process has started");
}

请参阅

WshController 对象 | WshRemote 对象 | Status 属性 | Error 属性 | Execute 方法 | Terminate 方法 | Start 事件 | Error 事件


Error 事件

该事件在远程脚本出错时引发。

Object_Error

参数

object
WshRemote 对象。

说明

当远程脚本过早终止时，远程脚本对象会引发 Error 事件。Error 属性中包含 WshRemoteError 对象（该对象带有有关导致远程脚本过早终止的错误的信息）。

示例

var WshController = new ActiveXObject("WSHController");
var RemoteProc = WshController.CreateScript("foo.wsf", "remotemachine");
WScript.ConnectObject(RemoteProc, "RemoteProc_");
var Done = false;
RemoteProc.Execute();
while (!Done)
   WScript.Sleep(100);

function RemoteProc_End()
{
   WScript.Echo("The process has ended");
   Done = true;
}

function RemoteProc_Error()
{
   WScript.Echo("An error has occurred:" + RemoteProc.Error.Description);
   Done = true;
}

function RemoteProc_Start()
{
   WScript.Echo("The process has started");
}

请参阅

WshController 对象 | WshRemote 对象 | WshRemoteError 对象 | Status 属性 | Error 属性 | Execute 方法 | Terminate 方法 | Start 事件 | End 事件


Start 事件

该事件在远程脚本开始执行时引发。

Object_Start

参数

object
WshRemote 对象。

说明

Start 事件在调用 Execute 方法时引发。

示例

var WshController = new ActiveXObject("WSHController");
var RemoteProc = WshController.CreateScript("foo.wsf", "remotemachine");
WScript.ConnectObject(RemoteProc, "RemoteProc_");
var Done = false;
RemoteProc.Execute();
while (!Done)
   WScript.Sleep(100);

function RemoteProc_End()
{
   WScript.Echo("The process has ended");
   Done = true;
}

function RemoteProc_Error()
{
   WScript.Echo("An error has occurred:" + RemoteProc.Error.Description);
   Done = true;
}

function RemoteProc_Start()
{
   WScript.Echo("The process has started");
}

请参阅

WshController 对象 | WshRemote 对象 | Status 属性 | Error 属性 | Execute 方法 | Terminate 方法 | End 事件 | Error 事件


错误信息

本节内容

以下是您在 Windows 脚本宿主 5.6 环境中运行脚本时可能遇到的错误信息列表。

//E 选项需要脚本引擎的名称。

//H 选项需要宿主名称。

//T 选项需要超时值。

已命名元素或未命名元素有重复的名称。

尝试用 //S 选项保存设置失败。

无法更改默认脚本宿主 <host name>。

找不到脚本的脚本引擎 <engine name>。

找不到脚本文件 <script file name>。

无法从 stdin 中读取脚本。

无法保存设置。

命令行选项不匹配。

无法连接对象 <object name>。

无法定位自动化类名称 <automation class name>。

Windows 脚本宿主的执行失败。

//H 选项的宿主名称必须是 "cscript" 或 "wscript"。

Windows 脚本宿主初始化失败。

不提供命令而调用 Exec 的尝试无效。

路径名称无效。

供读取的注册表项 <name> 中的根无效。

URL<name> 中的语法无效。

//T 选项的超时值无效。

加载脚本 <script name> 失败。

加载设置失败。

缺少作业名称。

找不到 <name> 的协议处理程序。

远程脚本对象只能执行一次。

脚本 <script name> 上的脚本执行时间超时。<script name> 的执行被终止。

脚本设置文件 <settings filename> 无效。

快捷方式路径名必须以 .lnk 或 .url 结尾。

<file name> 中没有文件扩展名。

没有名为 <name> 的打印机。

没有文件扩展名 <file extension> 的脚本引擎。

未指定脚本文件。

无法执行 — 参数列表太长。

无法打开注册表项 <name> 供读取。

无法移除环境变量 <name>。

无法移除注册表项 <name>。

无法保存快捷方式 <name>。

无法将快捷方式目标设为 <name>。

无法写入 wsh.log。请向您的管理员咨询。

无法等待进程。

无法运行远程脚本。

找不到作业 <job identifier>。

该平台不支持 Unicode。

指定了未知选项 <option designation>。

该计算机上的 Windows 脚本宿主访问被禁用。要获得详细信息，请与您的系统管理员联系。

相关章节

WSH 参考
组成 WSH 参考的元素列表。
WSH 基础
了解 WSH 的基本概念。


//H 选项需要宿主名称。

您没有指定默认的宿主名称。

改正此错误

  • 使用 //H 选项时，请指定默认的宿主名称。

请参阅

//H 选项的宿主名称必须是 "cscript" 或 "wscript"。


//T 选项需要超时值。

您没有为 //T 选项输入超时值。

改正此错误

  • 使用 //T 选项输入一个超时值。

请参阅

//T 选项的超时值无效。 | 脚本 <script name> 上的脚本执行时间超时。<script name> 的执行被终止。


命名元素或未命名元素有重复的名称。

Windows 脚本宿主

已命名元素或未命名元素有重复的名称。

您正在尝试用已经由其他 <named> 或 <unnamed> 元素使用的名称命名 <named> 或 <unnamed> 元素。<named> 或 <unnamed> 元素的 "name" 属性必须在整个 <job> 中唯一。

改正此错误

  • 为 <named> 或 <unnamed> 元素另选一个名称。

请参阅

WshArguments 对象 | WshNamed 对象 | WshUnnamed 对象 | <named> 元素


尝试用 //S 选项保存设置失败。

这通常又是系统权限问题。

改正此错误

  • 向系统管理员咨询，看是否存在潜在的网络问题或安全性问题。

请参阅

无法更改默认脚本宿主 <host name>。 | 设置脚本属性


无法执行 — 参数列表太长。

这种错误通常发生在使用了 Windows 脚本宿主的拖放功能时。在 Windows 脚本文件上放置的文件太多时，就会发生这种情况。

改正此错误

  • 少拖放一些项，可缩短参数列表。
注意 您的系统允许的最大命令行长度决定了可以拖放到脚本中的文件数量。

请参阅

  • 拖放支持 | 命令行选项不匹配。


无法写入 wsh.log。请向您的管理员咨询。

您正在 Windows 95/98 和 Windows Millennium Edition 中调用 LogEvent() 方法，但因为 wsh.log 文件被锁定，调用失败。

改正此错误

  • 如果您具有适当的权限，可以对 wsh.log 文件解锁，或与系统管理员联系。

请参阅

LogEvent 方法


无法更改默认脚本宿主 <host name>。

这通常是系统权限问题。可能是由于管理员锁定了系统注册表。

改正此错误

  • 向系统管理员咨询，看是否存在潜在的网络问题或安全性问题。

请参阅

尝试用 //s 选项保存设置失败。


无法找到脚本的脚本引擎 <engine name>。

Windows 脚本宿主

找不到脚本的脚本引擎 <engine name>。

通常，这表示脚本引擎没有安装。

改正此错误

  • 向系统管理员咨询，看是否存在潜在的网络问题或安全性问题。
  • 确保已经安装了特定的脚本引擎，或您指定了正确的脚本引擎。
  • 检查拼写。


无法找到脚本文件 <script file name>。

Windows 脚本宿主

找不到脚本文件 <script file name>。

您给出的路径有误，或脚本文件不在那里。

改正此错误

  • 检查给出的路径并更正。
  • 确保文件的确在那里。

请参阅

路径名称无效。


无法从 stdin 中读取脚本。

这通常是权限问题。

改正此错误

  • 向系统管理员咨询，看是否存在严重的网络问题或安全性问题。


无法保存设置。

无法保存该脚本的控制文件 (*.wsh)。

改正此错误

  • 验证您要保存的文件不是只读文件、未在另一个应用程序中打开或未被管理员锁定。
  • 向系统管理员咨询，看是否存在潜在的网络问题或安全性问题。

请参阅

设置脚本属性


命令行选项不匹配。

这通常说明您指定了相互冲突的参数。例如， //B - 批处理模式与 //I - 交互模式不一致。

改正此错误

  • 检查参数是否存在冲突。


无法连接对象 <object name>。

可能您正试图将事件同步到对象，或者您正将事件提供给无法接受那些对象事件的对象。

例如，IE 一旦创建，便无法连接到事件。当创建 IE 作为对象时，您必须将所有对象事件连接到 IE，以此作为创建过程的一部分。

改正此错误

  • 创建对象，并在创建过程中将其对象事件与之相连。

请参阅

<object> 元素 | WScript 对象


无法定位自动化类名称 <automation class name>。

要么您没有成功创建自动化类，要么自动化类没有正确安装。

改正此错误

  • 确保您创建的自动化类已经安装。
  • 向系统管理员咨询，看是否存在潜在的网络问题或安全性问题。


//E 选项需要脚本引擎的名称。

您未使用 //E 选项指定脚本引擎。

改正此错误

  • 使用 //E 选项时，确保指定脚本引擎。

请参阅

没有文件扩展名 <file extension> 的脚本引擎。


无法移除环境变量 <name>。

您正对不可识别的环境变量调用方法 Environment.Remove()。

这种错误通常发生在您使用了 Remove 方法时。如果环境变量不存在或拼写有误，系统就无法移除它。

改正此错误

  • 检查当前环境变量的名称，并确保其存在而且拼写正确。

请参阅

Remove 方法 | WshEnvironment 对象


Windows 脚本宿主运行失败。

Windows 脚本宿主

Windows 脚本宿主的执行失败。

这通常是系统权限问题。

改正此错误

  • 向系统管理员咨询，看是否存在严重的网络问题或安全性问题。

请参阅

加载脚本 <script name> 失败。


//H 选项的宿主名称必须是 "cscript" 或 "wscript"。

使用 //H 选项时，您指定了 "cscript" 和 "wscript" 以外的内容作为宿主名称。

改正此错误

  • 使用 //H 选项时，请指定 "cscript" 或 "wscript" 作为宿主名称。

请参阅

H 选项需要宿主名称。


Windows 脚本宿主初始化失败。

Windows 脚本宿主初始化失败。

改正此错误

  • 向系统管理员咨询，看是否存在严重的网络问题或安全性问题。


不提供命令而调用 Exec 的尝试无效。

您调用了 WshShell.Exec() 方法，但未提供要执行的命令。

改正此错误

  • strCommand 是必需的参数。它是一个表示用于运行脚本的命令行的字符串。

请参阅

Exec 方法


无效路径名称。

Windows 脚本宿主

路径名称无效。

您给出的路径有误。

改正此错误

  • 检查给出的路径并更正。

请参阅

找不到脚本文件 <script file name>。


快捷方式路径名必须以 .lnk 或 .url 结尾。

当您命名快捷方式时，要么没有给出文件扩展名，要么给出了 *.lnk 和 *.url 以外的扩展名。

在使用 CreateShortcut 方法时，文件扩展名错误或丢失。

改正此错误

  • 对于 Windows 快捷方式，检查文件扩展名是否以 .lnk 结尾；对于 Internet 快捷方式，检查文件扩展名是否以 .url 结尾。

请参阅

WshShortcut 对象 | WshUrlShortcut 对象


//T 选项的超时值无效。

您使用 //T 选项输入的超时值无效。您必须为 //T 选项指定一个非负整数。

改正此错误

  • 使用 //T 选项输入一个适当的超时值。为 //T 指定一个非负整数。

请参阅

//T 选项需要超时值。 | 脚本 <script name> 上的脚本执行时间超时。<script name> 的执行被终止。


加载脚本 <script name> 失败。

通常，这是系统权限问题，您对正在处理的文件的读取权限被拒绝。

改正此错误

  • 向系统管理员咨询，看是否存在严重的网络问题或安全性问题。

请参阅

加载设置失败。


加载设置失败。

这通常是系统权限问题。

改正此错误

  • 向系统管理员咨询，看是否存在严重的网络问题或安全性问题。

请参阅

加载脚本 <script name> 失败。


缺少作业名称。

您没有指定作业名称。

改正此错误

  • 指定作业名称。

请参阅

找不到作业 <job identifier>。


没有名为 <name> 的打印机。

SetDefaultPrinter 方法只接受当前安装的打印机的名称。这种错误发生的原因通常是您指定了打印机端口（而不是打印机名），或者是您使用了当前未安装的打印机的名称。

改正此错误

  • 检查当前安装的打印机的名称，并确保已安装了指定的打印机。
  • 检查打印机路径的拼写是否有键入错误。
  • 确保网络打印机处于联机状态。

请参阅

SetDefaultPrinter 方法 | EnumPrinterConnections 方法 | AddWindowsPrinterConnection 方法


找不到 <name> 的协议处理程序。

这种错误通常发生在 URL 快捷方式目标的协议处理程序拼写有误时。两个最常用的协议处理程序是 HTTP 和 FTP。

改正此错误

  • 检查协议处理程序的拼写。

请参阅

WshUrlShortcut 对象


供读取的注册表项 <name> 中的根无效。

您正在对不可识别的根注册表项调用方法 RegRead() 或 RegWrite()。

这种错误通常发生在您对无效的注册表项使用了 RegRead 或 RegWrite 方法时。

改正此错误

  • 检查 Windows 注册表，确保该注册表项存在而且拼写正确。

请参阅

RegRead 方法 | RegWrite 方法 | RegDelete 方法


无法打开注册表项 <name> 供读取。

您正在对不可识别的注册表项调用方法 RegRead()。

这种错误通常发生在您对无效的注册表项使用了 RegRead 方法时。

改正此错误

  • 检查 Windows 注册表，确保该注册表项存在而且拼写正确。

请参阅

RegRead 方法


无法移除注册表项 <name>。

您正在对不可识别的注册表项调用方法 RegDelete()。

这种错误通常发生在您对无效的注册表项使用了 RegDelete 方法时。

改正此错误

  • 检查 Windows 注册表，确保该注册表项存在而且拼写正确。

请参阅

RegDelete 方法 | RegRead 方法 | RegWrite 方法


远程脚本对象只能执行一次。

您正在尝试重新运行远程脚本对象。

改正此错误

  • 另建一个远程脚本对象，并运行它。

请参阅

WshRemote 对象


脚本 <script name> 上的脚本运行时间超时。<script name> 运行被终止。

Windows 脚本宿主

脚本 <script name> 上的脚本执行时间超时。<script name> 的执行被终止。

在用户定义的执行时间 (//T) 内，正在处理的脚本无法执行。

改正此错误

  • 检查脚本错误，以确定在您设置的时间参数 (//T) 内脚本没有执行的原因。重新设计脚本，以使其执行速度更快，并/或更改时间参数 (//T)。

请参阅

T 选项需要超时值。 | T 选项的超时值无效。


脚本设置文件 <settings filename> 无效。

您使用了无效的脚本设置文件。

改正此错误

  • 重新创建脚本设置文件，或向您的系统管理员咨询。


URL<name> 中的无效语法。

Windows 脚本宿主

URL<name> 中的语法无效。

这种错误通常发生在组成 URL 目标的文本中包含错误的语法时。

改正此错误

  • 检查 URL 目标的拼写是否有键入错误。

请参阅

WshUrlShortcut 对象


无法保存快捷方式 <name>。

该错误通常发生在快捷方式名称已经存在，或它是只读文件时。

改正此错误

  • 将只读属性改为读/写。
  • 对快捷方式重命名使其唯一。
  • 更改现有快捷方式的名称。

请参阅

WshShortcut 对象 | WshUrlShortcut 对象


无法将快捷方式目标设为 <name>。

这种错误通常发生在 URL 快捷方式目标的协议处理程序无效或未正确注册时。两个最常用的协议处理程序是 HTTP 和 FTP。

改正此错误

  • 使用有效的协议处理程序。
  • 检查所用协议处理程序的拼写。
  • 与系统管理员联系，以确保协议处理程序已正确安装。
  • 向系统管理员咨询，看是否存在潜在的网络问题或安全性问题。

请参阅

WshUrlShortcut 对象


<file name> 中没有文件扩展名。

要确定哪种脚本引擎适合，程序通常需要适当的文件扩展名。

改正此错误

  • 确保在文件名中包括正确的文件扩展名，扩展名适于您希望使用的脚本语言。


没有文件扩展名 <file extension> 的脚本引擎。

该文件扩展名没有映射到脚本引擎上。

改正此错误

  • 检查文件扩展名，同时检查指定脚本语言的拼写。
  • 使用 //E 指定脚本引擎。

请参阅

E 选项需要脚本引擎的名称。


未指定脚本文件。

您没有指定脚本文件。

改正此错误

  • 请指定适当的脚本文件。

请参阅

指定了未知选项 <option designation>。


无法运行远程脚本。

脚本无法初始化。

改正此错误

  • 向系统管理员咨询，看是否存在潜在的网络问题或安全性问题。

请参阅

WshRemote 对象


找不到作业 <job identifier>。

您在 Windows 脚本文件（*.wsf 文件）中引用了不可识别的作业 ID。

改正此错误

  • 检查作业 ID 的拼写是否有键入错误。

请参阅

使用 Windows 脚本文件 | <job> 元素


无法等待进程。

当脚本挂起，等待一个不返回值的进程（如，等待运行快捷方式链接的结果）时通常发生该错误。

改正此错误

  • 直接运行程序，而不要使用快捷方式。
  • 检查快捷方式链接，以确保其仍是当前链接。

请参阅

Run 方法


该平台不支持 Unicode。

WIN 95/98 和 Windows Millennium Edition 平台不支持使用 Unicode。

改正此错误

  • 不要尝试在 WIN95/98 或 Windows Millennium Edition 平台上使用 Unicode。


指定了未知选项 <option designation>。

您指定的选项对于 Windows 脚本宿主无效。

改正此错误

  • 使用与您正在使用的脚本语言相应的 Windows 脚本宿主选项，或指定其他受支持的脚本语言。
  • 另外，请检查拼写。

请参阅

未指定脚本文件。


该计算机上的 Windows 脚本宿主访问被禁用。与您的系统管理员联系，以获得详细信息。

Windows 脚本宿主

该计算机上的 Windows 脚本宿主访问被禁用。要获得详细信息，请与您的系统管理员联系。

这通常是系统权限问题。

改正此错误

  • 向系统管理员咨询，看是否存在潜在的网络问题或安全性问题。

请参阅

Windows 脚本宿主的执行失败。


脚本部件

Microsoft® Windows® 脚本部件为您提供了使用脚本语言（诸如 Microsoft® Visual Basic® Scripting Edition (VBScript) 和 Microsoft® JScript®）来创建 COM 部件的便利途径。脚本部件可以作为 COM 部件应用于应用程序，诸如 Microsoft® Internet Information Services (IIS)、Microsoft® Windows® Script Host、以及其他任何支持 COM 部件的应用程序。下面列出了本教程所要论述的内容。

  • 脚本部件概述 了解何为脚本部件以及如何使用脚本部件。
  • 创建脚本部件 创建一个脚本部件。
  • 使用脚本部件 在应用程序中使用脚本部件。
  • 实现 ASP 脚本部件 创建一个具有 Active Server Page (ASP) 功能的脚本部件，允许您可以隔离和复用 ASP 逻辑。
  • 实现 DHTML Behavior 脚本部件 创建一个可以用来在 Microsoft® Internet Explorer 5.0 中定义操作的脚本部件。


脚本部件概述

Windows® 脚本部件是一个令人激动的新技术，使您可以通过易于使用的脚本语言（Microsoft® Visual Basic® Scripting Edition (VBScript) 和 Microsoft® JScript®）来创建功能强大的、可复用的 COM 部件。下述主题提供了脚本部件技术的概述，并说明了如何创建和使用脚本部件。

  • 脚本部件简介 了解何为脚本部件，以及使用脚本部件的优点。
  • 脚本部件是如何运作的 了解脚本部件所包含的技术，以及如何创建脚本部件。


Windows 脚本部件简介

Windows® 脚本部件为您提供了用脚本创建功能强大、可复用的 COM 部件的简便方式。您可以使用任何支持 Microsoft® ActiveX® Scripting 接口的脚本语言来创建脚本部件。支持这些接口的脚本语言有： JScript、 Microsoft® Visual Basic® Scripting Edition (VBScript)、PERLScript、PScript 和 Python。

注意 关于 ActiveX Scripting 接口的详细信息，请参阅在 www.microsoft.com 的Microsoft Scripting Technologies Web 站点。

新的脚本部件技术支持公共类型的 COM 部件，如 Automation，并且可以使用 DHTML Behavior等外接程序加以扩展。

脚本部件:

  • 小巧高效。
  • 易于创建、维护和部署。
  • 提供了创建 COM 部件的能力。
  • 提供了访问大量系统服务的能力。

使用脚本部件可以为多种任务创建 COM 部件，如执行中间层业务逻辑、访问和操作数据库数据、给应用程序添加事务处理以及使用 DHTML Behavior给 Web 页添加交互效果等。

请参阅

脚本部件是如何运作的 | 创建脚本部件


脚本部件是如何运作的

Windows® 脚本部件技术包括下述三个部分：

  • 脚本部件运行时程序 (Scrobj.dll)，用来帮助将 COM 请求发送到脚本部件。按照 COM 的术语，Scrobj.dll 是作为脚本部件的 inproc 服务器来执行。
  • 接口处理程序，这是已编译好的实现特定 COM 接口的部件。不同的接口处理程序可以作为特定类型的 COM 部件。

    在脚本部件运行库中已内置了最常使用的接口处理程序，包括 COM Automation 接口处理程序、ASP 接口处理程序以及用于 DHTML Behavior 的处理程序。其他处理程序可作为外接部件或嵌在特定的应用程序中。

  • 脚本部件文件 (这是一个 .wsc 文件)。脚本部件文件属于 XML (可扩展的标记语言) 文件，其中包含要创建何种 COM 部件类型的信息（也就是要使用何种接口处理程序）。然后，根据该处理程序提供的可用功能，在脚本部件中编写脚本来实现这些接口。

脚本部件运行时程序可以用作宿主应用程序的入口点。复杂的 COM，包括诸如 IUnknown 之类的 COM 标准接口的实现等，都包含在各种接口处理程序种。脚本部件只包含为实现该 COM 部件的功能所必需的脚本。

例如， Automation 部件是最常使用的 COM 部件类型，该部件拥有属性和方法，可以从其他应用程序来调用这些属性和方法。实现这个功能 — 诸如当某个方法被调用时发送给正确的函数 — 所必需的低层次 COM 接口都内置于 Automation 接口处理程序。在脚本部件文件中只需定义需要说明的属性、方法和事件，Automation 处理程序将确保在宿主应用程序需要它们时能正确调用。

请参阅

脚本部件简介 | 创建脚本部件


创建脚本部件

创建 Windows® 脚本部件 (.wsc) 文件与创建任何包含脚本的文件（包括 HTML 文件）类似。下述主题提供了有关脚本部件文件的基本布局，同时也提供了关于创建注册信息和类型库的信息。

  • 脚本部件文件的内容 学习脚本部件所必需的 XML (可扩展标记语言) 元素。
  • 使用脚本部件向导 使用脚本部件向导来创建脚本部件文件。
  • 创建注册信息
    在脚本部件文件中创建在将其注册为 COM 部件时要使用的信息。
  • 说明方法 给脚本部件添加方法。
  • 说明属性 给脚本部件添加属性。
  • 说明事件 在脚本部件中定义和激活自定义事件。
  • 创建脚本部件类型库 为脚本部件创建类型库，以便能更方便地在宿主应用程序中使用该脚本部件。
  • 引用其他部件 包括对脚本中所需的对象的全局引用，或对提供脚本中所用常数的外部类型库的全局引用，或对指向没有硬编码到脚本中的字符串或值的资源的全局引用。
  • 引用同一个程序包中的其他脚本部件 当同一个程序包中包括多个脚本部件时，将一个脚本部件的功能嵌入到另一个脚本部件中。
  • 检查脚本部件文件中的错误 给脚本部件添加编译时的错误检查。
  • 脚本部件文件和 XML 一致性 学习 XML 的一致性。


脚本部件文件的内容

Windows® 脚本部件文件采用 XML (可扩展标记语言)来编写，这种文件与 HTML 文件很相似，但包含了用于定义脚本部件及其操作的特有元素。用来定义脚本部件的元素不是 HTML 标记，而是专门用于脚本部件定义的 XML 元素。

一个基本的脚本部件文件包含这些元素：

  • <component> 和 <package> 元素 <component> 元素包含的是一个完整的脚本部件定义。在同一个 .wsc 文件中可以出现多个 <component> 元素，但这些元素应包含在一个 <package> 元素内。
  • <registration> 元素 包括用来将脚本部件注册为 COM 部件的信息。如果宿主应用程序 （如 Microsoft® Internet Explorer 5.0）在创建该脚本部件的实例时没有直接使用 Windows 注册表，则该元素不是必需的。
  • <public> 元素 包含脚本部件所说明的属性、方法和事件的定义。这些定义指向定义在独立的 <script> 块中的变量或函数。
  • <implements> 元素 给脚本部件指定 COM 接口处理程序，这将确定该脚本部件属于哪种 COM 部件类型。例如，通过指定 <implements type=ASP>，就可以实现 ASP 接口处理程序，并因此在脚本部件中可以访问 ASP 对象模型。

    <public> 元素即指定了脚本部件将实现 COM Automation 接口处理程序。因此，对 Automation 处理程序无需创建 <implements> 元素。

    注意 脚本部件运行库包括用于 Automation （使用 <public> 元素说明的）、用于 ASP 以及用于 Internet Explorer 5.0 DHTML Behavior 的接口处理程序。其他接口处理程序可以作为外部 DLL 获得。关于附加的接口处理程序和脚本部件的详细信息，请参阅 Microsoft Scripting Technologies Web 站点。
  • <script> 元素 包含用来实现脚本部件逻辑的脚本，这取决于所创建的 COM 部件类型。例如，如果要创建的是 COM Automation 部件，则可以在 <public> 元素中声明属性、方法和事件，然后用一个或多个 <script> 元素编写脚本来定义这些内容。.
  • <object> 元素 包含脚本中所使用的某个对象的信息，如另一个 COM 部件的信息。
  • <resource> 元素 包含不应被硬编码到脚本部件代码中的值。资源元素可能包括在各个版本间可能更改的信息，可能需要翻译的字符串以及其他值。
  • <reference> 元素 引用在脚本中需要使用的类型库。
  • <comment> 元素 包含在分析和执行该脚本部件时将被忽略的文字。
    注意 如果希望所创建的 .wsc 文件的 XML 遵守 XML 标准，您可以指定脚本部件的 XML 语法分析器检查 XML 语法。例如，如果今后可能会使用 XML 编辑器来编辑该文件，那么这种要求是很有用的。不过，这通常是不受关注的。详细信息请参阅脚本部件文件和 XML 一致性。

脚本部件文件的框架

下面的示例演示了一个脚本部件文件的结构。

<?XML version="1.0"?>
<package>
<?component error="true" debug="true"?>

   <comment>
      本框架演示了脚本部件的各种元素
      在 .wsc 文件中是如何安置的。
   </comment>

<component id="MyScriptlet">
   <registration
      progid="progID"
      description="description"
      version="version"
      clsid="{00000000-0000-0000-000000000000}"/>

   <reference object="progID">

   <public>
      <property name="propertyname"/>
      <method name="methodname"/>
      <event name="eventname"/>
   </public>

   <implements type=COMhandlerName id=internalName>
      (interface-specific definitions here)
   </implements>

   <script language="VBScript">
      <![CDATA[
      dim propertyname
      Function methodname()
      ' Script here.
      End Function
      ]]>
   </script>

   <script language="JScript">
      <![CDATA[
      function get_propertyname()
      { // Script here.
      }
      function put_propertyname(newValue)
      { // Script here.
         fireEvent(eventname)
      }
      ]]>
   </script>

   <object id="objID" classid="clsid:00000000-0000-0000-000000000000">
   <resource ID="resourceID1">string or number here</resource>
   <resource ID="resourceID2">string or number here</resource>
</component>
</package>
注意 在 XML 中，您可以指定没有内容的元素（只有属性），如上面示例中的 <property> 和 <method> 元素，方法是用 />来结束该元素。

请注意：

  • 在开始处的 <?XML ?> 声明说明这是一个 XML 文件，将遵守 XML 协议。该声明是可选的；如果遗漏该声明，则在创建该脚本部件的元素时可以使用稍微宽松一些的语法。详细信息请参阅脚本部件文件和 XML 一致性。
  • 在本示例中 <package> 元素是可选的，因为该文件只包含一个 <component> 元素。
  • <?component?> 处理指令包括用来指定错误检查选项的特性。详细信息请参阅检查脚本部件文件中的错误。如果没有包括该元素，则缺省选项是所有都不选中。
  • <comment> 元素可以出现在脚本部件中的任何位置。
  • 在所有情况下 <registration> 元素都不是必需的。例如，如果脚本部件实现的是 Internet Explorer 5.0 中的 DHTML Behavior 接口处理程序，则不需要进行注册，因为 Internet Explorer 直接在页面上按照所检测的操作进行实例化。有关注册要求的详细信息，请参阅所要实现的接口处理程序的有关文档，此外也要注意使用该脚本部件将是哪种主机。
  • <reference> 元素允许您在脚本部件中包括一个类型库，以便在脚本中使用这个库的常数。
  • <public> 元素内包括了 <property>、<method> 和 <event> 元素。相应的定义这些内容的脚本位于脚本部件文件的后面。
  • <implements> 元素可以用来获得非缺省的 COM 接口。例如，您可以通过下述方式用 <implements> 的 type 来说明 ASP 接口：
    <implements type="ASP" id="iASP">

    在 <implements> 元素中出现的确切元素取决于您所要实现的接口类型。

    注意 此处显示的 <implements> 元素有一个 id 属性。不过，该属性是可选的，除非必须区分对象或变量。详细信息请参阅 <implements> 元素。
  • 在这个框架文件中有两个脚本元素，一个用于 VBScript，一个用于 JScript。如果您只使用一种脚本语言，则不需多个<script> 元素。由于文件的开始有 <?XML ?> 声明，因此必需要有一个 CDATA 项来使 <script> 元素中的脚本不透明。详细信息请参阅脚本部件文件和 XML 一致性。
  • <object> 元素创建指向该脚本部件的脚本中所使用的对象的引用。

在创建该框架后，再根据所要实现的接口处理程序，来填充这些元素以定义该脚本部件的功能。

请参阅

检查脚本部件文件中的错误 | 创建脚本部件类型库 | 创建注册信息 | 说明事件 | 说明方法 | 说明属性 | 实现 ASP 脚本部件 | 实现 DHTML Behavior 脚本部件 | 脚本部件文件和 XML 一致性 | 使用脚本部件向导


使用脚本部件向导

Windows® 脚本部件程序包中包括了一个脚本部件向导，该向导可以自动完成创建脚本部件 .wsc 文件的过程。该向导将执行下述功能：

  • 创建 .wsc 文件并添加基本的 XML 元素。
  • 提示并创建注册信息。
  • 提示输入脚本部件要使用的接口处理程序类型。
  • 提示输入要说明的属性，并用指定的脚本语言创建必要的元素。
  • 提示输入要说明的方法，并用指定的脚本语言创建必要的元素。
  • 提示输入脚本部件可以使用的事件并创建事件元素的框架。
    注意 您可以从 Microsoft Scripting Technologies Web 站点下载和安装该脚本部件向导。

该向导将使用您提供的信息创建一个脚本部件的框架，并作为 .wsc 文件输出。请编辑该 .wsc 文件并添加您的脚本来创建脚本部件的功能。

注意 该向导所创建的脚本部件文件的开始包含 <?XML ?> 声明，表示该文件的内容必须是与 XML 一致的。详细信息请参阅脚本部件文件和 XML 一致性。

请参阅

脚本部件文件的内容 | 创建注册信息 | 创建脚本部件 | 脚本部件文件和 XML 一致性


创建注册信息

如果宿主应用程序需要，您可以使用 Regsvr32.exe 之类的程序将 Windows® 脚本部件注册为 COM 部件。注册操作将把有关 COM 部件的信息放在一个公共位置（在 Windows 中，注册信息存储在 Windows 注册表中）。通过读取注册信息，应用程序可以找到并载入该 COM 部件。

注意 并不是在每种情况下都需要进行注册。例如，如果脚本部件实现的是 Internet Explorer 5.0 中的 DHTML Behavior 接口处理程序，则该脚本部件就不需要注册，因为 Internet Explorer 将按照在页面上所检测到的操作进行注册。关于使用 Behavior 的详细信息，请参阅 Microsoft Site Builder Network (SBN) Web 站点上的关于使用 DHTML Behavior 主题。如果宿主应用程序支持名字(monikers)，那么不必进行注册就可以创建一个脚本部件的实例。

在指定注册时，最重要的信息有：

  • 程序 ID (prog ID)，这是宿主应用程序在创建脚本部件的实例时所使用的名称。例如，如果脚本部件的程序 ID 是 Component.MyComponent，则您可以使用下述语句在 Microsoft® Visual Basic® 中创建该脚本部件的一个实例：
    Set Component = CreateObject("Component.MyComponent")
  • 类 ID，这是一个唯一标识脚本部件的 GUID （全局唯一的 ID）。您可以使用诸如 Uuidgen.exe 的程序生成一个 GUID。
    注意 如果使用脚本部件向导创建了一个脚本部件，该向导将自动创建一个程序 ID 和类 ID。详细信息请参阅使用脚本部件向导。

注册信息还包括一个描述和版本号。

在注册脚本部件时，注册程序可以为其创建一个类 ID。不过，该程序强烈建议您自己为该脚本部件提供一个类 ID，以确保该脚本部件在其注册的所有计算机上具有相同的类 ID。如果与存储类 ID 的开发工具一起使用该脚本部件，则让注册程序来创建类 ID 还有可能导致问题。如果注册过程每次创建一个新的类 ID，则与应用程序所存储的 ID 会不匹配。

要为脚本部件创建注册信息

  • 可以按照下述示例来创建一个至少包含一个程序 ID，以及可选的类 ID、描述以及版本号的 <registration> 元素：
    <registration
description="My Test Component"
progid="Component.TestScript"
version="1"
classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"/>
    注意 <registration> 元素中的注册属性的顺序可以任意。

在注册期间运行脚本

脚本部件的 <registration> 元素还允许您包括在注册和取消注册时将执行的脚本。例如，您可以在脚本部件完成注册后发布一个消息。

要在注册和取消注册期间运行脚本

  • 在 <registration> 元素中可以包括一个 <script> 元素。要在注册期间运行脚本，请写上 register( ) 函数。要在取消该脚本部件的注册时运行脚本，请包括一个 unregister( ) 函数。

    下述示例演示了在注册脚本部件或取消其注册时如何发布消息。

    注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅 脚本部件文件和 XML 一致性。
    <registration
   description="My Test Component"
   progid="Component.TestScript"
   version="1"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}">

   <script language="VBScript">
   <![CDATA[
      Function register()
         MsgBox "Component 'My Test Component' registered."
      End Function
      Function unregister()
         MsgBox "Component 'My Test Component' unregistered."
      End Function
   ]]>
   </script>
</registration>

远程访问注册

如果将脚本部件部署在一个分布式环境中，则可以指定允许远程实例化该脚本部件。例如，您可能创建了一个在服务器上运行，但需要从客户端的代码来调用的脚本部件。如果客户端和服务器端的机器都正确配置了 DCOM，则这种方式是可行的，因为 DCOM 提供了将对象指针从服务器传给客户端的机制。

为远程访问注册脚本部件

  • 可以在 <registration> 元素中包括远程属性，如下述示例所示：
    <registration
   description="My Test Component"
   progid="Component.TestScript"
   version="1"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
   remotable=true/>

关于远程创建脚本部件的实例的详细信息，请参阅在应用程序中使用脚本部件。

请参阅

脚本部件文件的内容 | 使用脚本部件文件向导 | 创建脚本部件类型库 | 检查脚本部件文件中的错误 | 脚本部件文件和 XML 一致性


说明方法

在 Windows® 脚本部件文件中方法是作为函数或子例程实现的。

要说明一个方法

  1. 创建一个 <public> 元素，该元素应作为 <component> 元素的子元素。
  2. 在 <public> 元素中包括一个 <method> 方法。该方法元素可以选择性地包括一个或多个 <parameter> 元素来定义该方法的参数。
  3. 可以用任何一种脚本语言编写一个过程来实现该函数。该过程应放在一个 <implements> 元素外面的 <script> 元素中，但应位于 <component> 元素内。请确保其函数名与 functionName 要一致，或者如果没有指定 functionName，则应该与在 <method> ;元素中指定的 methodName 名字一致。

    例如，下面的示例演示了具有两个方法的脚本部件文件片段，这两个方法分别为 factorial 和 getRandomNumber。

    注意 CDATA 项是必需的，以使 <script> 元素中的脚本是不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
    <public>
   <method name="factorial"/>
   <method name="random" internalName="getRandomNumber">
      <parameter name="upperBound"/>
      <parameter name="seed"/>
   </method>
</public>

<script language="VBScript">
Function factorial(n)
   <![CDATA[
   If isNumeric(n) Then
      If n <= 1 Then
         factorial = 1
      Else
         factorial = n*factorial(n-1)
      End If
   Else
      factorial = -2   ' Error code.
   End If
End Function

Function getRandomNumber(upperBound, seed)
   getRandomNumber = Cint(upperBound * Rnd(seed) + 1)
End Function
]]>
</script>

可以给脚本部件指定一个缺省方法，以便宿主应用程序不必显式调用就可以使用该方法。例如，如果已声明了一个称为 factorial 的方法，并将其标记为缺省的，则可以在 Visual Basic 中用下述方式调用该函数：

Set component = CreateObject("component.MyComponent")
n = component.factorial(4)   ' Calls factorial method explicitly.
n = component(4)   ' Calls factorial method as default.

要指定缺省方法，请包括一个将特殊的派遣标识符(dispid)指定给该方法的属性。关于 dispid 的详细信息，请参阅说明事件。

要指定缺省方法

  • 在 <method> 方法中，按下述示例所示包括属性 dispid="0"：
    <public>
   <method name="factorial" dispid="0"/>
</public>
    注意 这个技术可用来指定一个缺省方法或一个缺省属性，但不能同时指定。在脚本部件中只能有一个元素的 dispid 为零。

请参阅

说明事件 | 说明属性 | 脚本部件文件的内容


说明属性

可以用两种方式来说明属性：

  • 作为简单值 该属性是一个简单的全局变量，脚本部件的用户可以读写这个变量。由于这个值是以全局量存储的，因此可以在 Windows® 脚本部件文件的各个脚本中使用这个变量。
  • 作为函数 使用一个函数来定义该属性。这样就使您可以计算属性的值，并控制属性是否为只读、可读写、或者是只写的。

还可以将属性标记为脚本部件的缺省值。

要作为简单值来说明一个属性

  1. 创建一个 <public> 元素，将其作为 <component> 元素的子元素。
  2. 在 <public> 元素中，包含一个指定用来存储属性值的变量的 <property> 元素。
  3. 要初始化一个简单属性的值，请在 <script> 元素中创建一个与 propertyName (或 propertyVariable ，如果指定了这个名字)匹配的名字的全局变量,并给其指定一个值。
  4. 下面的脚本部件片段演示了两个作为简单值说明的属性 (name and tag)。这两个属性是在 <script> 元素中使用全局变量来初始化的。
    注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
    <public>
   <property name="name"/>
   <property name="tag" internalName="tagVar"/>
</public>

<script language="VBScript">
   <![CDATA[
   Dim name
   name = "script component"   ' Initializes the value of name property.
   Dim tagVar
   tagVar = "10"   ' Initializes the value of tag property.
   ]]>
</script>

使用函数来说明属性与说明方法的方式类似。

要使用函数来说明一个属性

  1. 在脚本部件文件的 <public> 元素中，包括一个 <property> 元素，其中可以包含一个 <get> 元素来定义只读函数，一个 <put> 元素来定义写入函数。如果没有定义 <put> 元素，则该属性就是只读的。如果没有包括 <get> 元素，则该属性就是只写的。
  2. 在 <public> 之外的 <script> 元素内编写过程来实现这个函数。设置属性值的函数 — 即 put 函数 — 必须接收一个参数，该属性将被设置为这个值。

    该过程的名称必须与在 <property> 元素中指定的内部名称一致。如果没有指定 internalName 属性，则对于读取函数，函数名称必须是该函数的名字再加上 get_ 前缀，对于写入函数，则应加上 put_ 前缀。

  3. 例如，下面的脚本部件片段是一个说明了三个属性的脚本部件文件示例，这三个属性为： sname、dateOfBirth 以及 age 。dateOfBirth 属性是作为函数定义的，因此它可以包括错误检查。age 属性是计算得到的，因此被定义为只读的。
    注意 CDATA 项是必需的，使 <script> 元素中的脚本称为不透明的。详细信息请参阅 脚本部件文件和 XML 一致性。
    <public>
   <property name="sname"/>
   <property name="age">
      <get internalName="readAge"/>
   </property>
   <property name="dateOfBirth">
      <get internalName="readDOB"/>
      <put internalName="writeDOB"/>
   </property>
</public>

<script language="VBScript">
<![CDATA[
Dim sname   ' 可读写的 sname 属性（非函数）。
Dim gDOB   ' 用来存储生日日期的全局变量。

Function readDOB()
   ' 取 dateOfBirth 属性的值。
   readDOB = gDOB
End Function

Function writeDOB(newDOB)
   ' 设置 dateOfBirth 属性的值。
   If isDate(gDOB) Then
      'Error checking
      gDOB = newDOB
   End If
End Function

Function readAge()
   ' 计算只读的 age 属性。
   If isDate(gDOB) Then
      dobM = DatePart("m", gDOB)
      dobD = DatePart("d", gDOB)
      dobY = DatePart("yyyy", gDOB)
      todayY = DatePart("yyyy", Date)
      age = todayY - dobY

      ' 如果今年还没过生日，则进行调整。
      bday = DateValue(dobM & "/" & dobD & "/" & todayY)
      If DateDiff("d", bday, DateValue(Date)) < 0 Then
         age = age - 1
      End If
      readAge = age
   End If
End Function
]]>
</script>

可以给脚本部件指定一个缺省属性，以便宿主应用程序不必显式地写出属性的名字就可以获取或设置该属性的值。例如，如果已声明了一个称为 sname 的属性，并将其标记为缺省的，则可以在 Visual Basic 中用下述任何一种方式来使用该属性：

Set component = CreateObject("Component.MyComponent")
n = component.sname   ' 显式地获取属性。
n = component   ' 按缺省情况获取 sname 的值。

要指定缺省属性，请包括一个将特殊的派遣标识符(dispid)指定给该方法的属性。关于 dispid 的详细信息，请参阅说明事件。

要指定一个缺省属性

  • 在 <property> 元素中，按下述示例所示包括属性 dispid="0"：
    <property name="sname" dispid="0"/>
    注意 这个技术可用来指定一个缺省方法或一个缺省属性，但不能同时指定。在脚本部件中只能有一个元素的 dispid 为零。

请参阅

说明事件 | 说明方法 | 脚本部件文件的内容 | 脚本部件文件和 XML 一致性


说明事件

要给 Windows® 脚本部件来添加事件能力：

  • 声明每一个希望能够激活的事件。
  • 脚本部件在必要时调用一个函数来激活该事件。

有些主机环境还会要求您生成一个类型库，主机需要这个类型库来绑定事件。详细信息请参阅创建脚本部件类型库。

注意 Behavior 处理程序以一种略微不同的方式来说明事件。详细信息请参阅在 Behavior 脚本部件中说明自定义事件。

声明事件

必须逐个地声明每个希望能够激活的事件。

要声明一个事件

  1. 创建一个 <public> 元素，该元素应作为 <component> 元素的子元素。
  2. 在 <public> 元素中，对每个要声明的事件包含一个 <event> 元素。
  3. 例如，下面的脚本部件片段演示了如何来说明两个事件：
    <public>
   <property name="sname"/>
   <method name="factorial"/>
   <event name="namechanged"/>
   <event name="querydone"/>
</public>

指定派遣标识符

COM 编程通过派遣标识符（称为 dispid ) 来提供事件通知，派遣标识符是指标识部件事件的整数值。dispid 在编译时被写入该部件的类型库，然后由宿主应用程序用来绑定到事件。

给脚本部件创建类型库的过程将自动为脚本部件的事件生成 dispid 。不过，如果您愿意，您可以指定自己的 dispid 。这样做的好处是：

  • 请保证脚本部件中的各个事件始终具有相同的 dispid 。如果由类型库生成程序指定 dispid,则在每次生成类型库时这些值可能会改变。
  • 将脚本部件中的事件映射到特定号码的 dispid 。例如，如果想激活一个标准的 COM 事件，如错误通知，可以将事件映射到 COM 中惯常使用的值。

要给事件指定一个 dispid，请在 <event> 元素中包括该 dispid 属性，如下例所示：

<public>
   <event name="namechanged" dispid="22">
</public>

Dispid 在脚本部件内必须是唯一的。您可以将一个为负数指定为 dispid，并映射到传统的事件，但必须使用指定的范围（如 -999 到 -500）加以控制。关于保留的 dispid 的范围的详细信息，请参阅 MSDN 库中的 DISPID 的文档。

注意 0 这个 dispid 号码用来标识缺省的方法或属性。详细信息请参阅说明方法和说明属性。

激活一个事件

可以通过调用 fireEvent 方法并指定要激活的事件名来激活一个事件。不能激活没有在 <implements> ; 元素中声明的事件。可以激活脚本部件文件任何脚本中的事件。例如，下面演示了在属性值更改时如何激活事件。

<script language="VBScript">
<![CDATA[
Sub put_lowercaseName(newLCName)
   name = newLCName
   fireEvent("namechanged")
End Sub
]]>
</script>

请参阅

在 Behavior 脚本部件中说明自定义事件 | 说明方法 | 说明属性 | 在宿主应用程序中处理脚本部件的事件 | 脚本部件文件的内容


创建脚本部件类型库

可以为 Windows® 脚本部件生成一个类型库，用来包含其接口和成员的信息。在有些宿主应用程序（如 Visual Basic）中，如果要给脚本部件启用事件能力，则类型库是必需的，而在其他宿主应用程序中，类型库则是可选的。不过，即使类型库不是必需的，生成类型库也能使脚本部件更易于使用，并在宿主应用程序中更少产生错误。

例如，如果您要使用 Visual Basic 作为宿主应用程序，使用 Reference 对话框来选择脚本部件的类型库。这样做可以将事件绑定到脚本部件上，并且在 Visual Basic 中可见。此外，在您编写脚本部件的相关 Visual Basic 代码时，Visual Basic 可以在语句结束时在对象浏览器中使用类型库信息，从而使您能够很方便地看到和使用脚本部件的属性、方法和事件。

注意 关于在宿主应用程序中使用类型库的详细信息，请参阅应用程序的文档。

创建脚本部件类型库

  • 在 Windows 资源管理器中，用鼠标右键单击脚本部件的 .wsc 文件，然后选择“生成类型库”。

    这将为脚本部件生成一个.tlb 文件，其文件名与脚本部件文件名相同，并在 Windows 注册表中注册。该文件位于 .wsc 文件所处的文件夹。

要更精确控制类型库的生成，您可以从脚本部件文件的脚本内动态地生成类型库，或者也可以使用命令行接口。

动态生成类型库

脚本部件运行库包括一个由Component.GenerateTypeLib 对象实现的 Automation 接口。您可以在脚本中使用这个对象从脚本部件文件内生成类型库。这对于在注册脚本部件时自动创建类型库是特别有用的。

动态创建脚本部件类型库

  1. 在脚本部件文件内的脚本中，可以使用类似下面的语法创建 Component.GenerateTypeLib 对象的一个实例：
    set oTL = CreateObject("Scriptlet.GenerateTypeLib")
  2. 可以设置Component.GenerateTypeLib 对象的下述属性：
属性/方法 | 描述
AddURL | (方法) 添加脚本部件的 URL 来生成类型库。您可以多次调用该方法属性，从而使类型库中包含多个脚本部件。
Path | (属性) 类型库的路径和文件名。如缺省路径是当前路径，缺省文件名是带有 .tlb 扩展名的脚本部件文件名。果该对象不能创建所指定的类型库，则将在脚本部件所处目录下缺省创建一个名为component.tlb 的类型库。
Doc | (属性) 是一个字符串，包含与类型库信息一起存储在注册表中的任何信息。
GUID (属性) 该类型库的 GUID。（不是脚本部件的 GUID。）如果不提供这个值，则GenerateTypeLib 对象将创建一个，但是这样在每个机器上类型库将具有不同的GUID。GUID 必须遵照以下格式，其中 x 代表十六进制值：
{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
Name | (属性) 类型库的内部名称。有些应用程序（如 Visual Basic Object Browser)将显示该名字。
MajorVersion | (属性) 指定的一个整数值。
MinorVersion | (属性) 指定的一个整数值。
  1. 调用该类型库对象的 Write 方法来创建 .tlb 文件，然后将其注册。
  2. 如果要创建一个附加类型库，请调用 GenerateTypeLib 对象的 Reset 方法来清除 AddURL 属性中的脚本部件文件的列表，重新设置 URL 以及任何其他所需的属性，然后重新调用 Write 方法。

例如，下面 <registration> 元素中的脚本将动态创建一个类型库。

注意 CDATA 项是必需的，将使 <script> 元素中的脚本成为不透明的。详细信息请参阅 脚本部件文件和 XML 一致性。
<registration
   description="My Test Component"
   progid="Component.TestScript"
   version="1"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}">
   <script language="VBScript">
   <![CDATA[
   Function Register()
      Set oTL = CreateObject("Scriptlet.GenerateTypeLib")
         oTL.AddURL "d:\components\MyComponent.wsc"   ' 脚本部件的 URL。
         oTL.AddURL "d:\components\YourComponent.wsc"
         oTL.Path = "d:\components\MyComponent.tlb"   ' .tlb 路径。
         oTL.Doc = "Sample component typelib"   ' 文档字符串。
         oTL.GUID = "{a1e1e3e0-a252-11d1-9fa1-00a0c90fffc0}"
         oTL.Name = "MyComponentTLib" ' tlb 的内部名称。
         oTL.MajorVersion = 1
         oTL.MinorVersion = 0
         oTL.Write ' 将 tlib 写入磁盘。
         oTL.Reset ' 清除 AddURL 中的 URL 列表。
      End Function
   ]]>
   </script>
</registration>

命令行接口

如果喜欢使用“命令提示符”窗口，则可以调用 Rundll32.exe 程序来创建类型库。

从命令提示符创建类型库

  • 可以使用下面的语法调用 Rundll32.exe：
    rundll32.exe path\scrobj.dll,GenerateTypeLib options

    其中：

    • path 代表 Scrobj.dll 在计算机中的位置。
    • options 为一组以 -flag:value 的格式来指定类型库的信息的标志和值。可以以任何顺序指定这些选项。支持如下标记来动态创建脚本部件类型库，这些标记的值见前一节的描述。
      -name:Name
      -file:Path
      -doc:\"Doc\"
      -guid:GUID
      -major:MajorVersion
      -minor:MinorVersion
      -URL:AddURL

例如，下面的命令将从 MyComponent.wsc 这个脚本部件创建一个称为 MyComponent.tlb 的类型库（为清楚起见，该命令分成多行显示）：

rundll32.exe c:\winnt\system32\scrobj.dll,GenerateTypeLib
   -name:MyComponentTLib -file:d:\components\MyComponent.tlb
   -doc:\"Sample component typelib\"
   -guid:{a1e1e3e0-a252-11d1-9fa1-00a0c90fffc0} -major:1 -minor:0
   -URL:d:\components\MyComponent.wsc

类型库疑难解答

生成类型库的过程可能因为各种原因而失败。所得到的错误信息可能不足以在所有情形下都能确定问题的所在。如果不能生成类型库，请查看下面可能导致失败的原因清单。

  • 如果属性是按函数定义的，则 get 和 put 函数的参数个数和名称必须一致。详细信息请参阅说明属性。
    注意 可以定义一个 get 和 put 属性函数的参数个数不相同的脚本部件，只是不能为该脚本部件创建一个类型库。
  • 如果说明了事件，则不能在脚本部件中多次使用相同的派遣标识符 (dispid) 。此外，也不能使用负数的 dispid，除非其属于一个特定的范围。详细信息请参阅说明方法。
  • 脚本部件中元素的 ID 属性必须是唯一的。如果您通过多个脚本部件生成类型库，它们在类型库中的 ID 必须一致。

请参阅

脚本部件文件的内容 | 创建注册信息 | 检查脚本部件文件中的错误 | 脚本部件文件和 XML 一致性


引用其他部件

Windows® 脚本部件可以包括为创建该脚本部件所需的外部部件的引用，这些部件可以是：

  • 附加的 COM 对象
  • 类型库
  • 资源，诸如不想硬编码到脚本部件的脚本中的数字和文本。

引用附加 COM 部件

在脚本部件中，可能需要创建其他必要的 COM 部件的实例。有两种方式来实现这一点：

  • 用脚本 可以直接在脚本中创建其他对象的实例。例如，可以使用 Microsoft® Visual Basic® Scripting Edition (VBScript) 的 CreateObject 函数或 JScript 中新的 ActiveXObject 对象。
  • 使用 OBJECT 元素 使用 <object> 元素和在 HTML 页面中使用 <OBJECT> 标记相似。使用 <object> 元素将使对象在全局范围内对任何脚本都可用，并允许脚本工具提供语句完善。它还提供了一个方便途径来总结和记录在脚本部件中所使用的对象。
    注意 尽管脚本部件中的 <object> 元素与 HTML 页面中的 <OBJECT> 标记相似，但脚本部件中的 <object> 元素的属性列表要少得多，因为脚本部件并不提供用户界面。

要创建一个 OBJECT 元素

  • 创建一个 <object> 元素。该元素应位于 <component> 元素内，但应在任何其他元素（如 <script> 元素）之外。

下面的示例演示了脚本部件中的对象声明。

<object id="cnn" progid="ADODB.Connection"/>

引用外部类型库

很多要使用的部件都支持类型库，类型库提供了该部件的类及其成员的一个完整列表。通过引用部件的类型库，就可以使用在类型库中定义的常数。

要包含一个类型库引用

  • 在脚本部件中包括一个 <reference> 元素，在其中指定要包括的类型库的位置和名称。例如：
    <reference object="ADODB.Connection.2.0"/>

引用资源

资源元素可以包括会在各个版本间更改的信息、可能要翻译的字符串以及其他值。

要引用资源

  1. 在脚本部件的 <public> 和 <script> 元素 (以及 <implements> 元素，如果有的话)之外，为每个要定义的资源创建一个 <resource> 元素，并给每个元素一个唯一的 ID。下面的示例演示了两个 <resource> 元素：
    注意 CDATA项是必须的，以便使 <resource> 元素的内容在分析程序中是不透明的。详细内容请参阅脚本部件文件和XML一致性.
    <component id="MyScriptlet">
<public>
   <method name="random" internalName="getRandomNumber"/>
</public>
<resource id="errNonNumeric"><![CDATA[Non-numeric value passed]]>
</resource>
<resource id="errOutOfRange"><![CDATA[Passed value is out of range ]]>
</resource>
  2. 在脚本中，可以通过调用 getResource 函数来包括这些资源文本或数字，如下例所示。
    注意 CDATA 项是必需的，以使 <script> 元素中的脚本在分析程序中是不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
    <script language="VBScript">
<![CDATA[
Function getRandomNumber(upperBound)
   If IsNumeric(upperBound) Then
      getRandomNumber = Cint(upperBound * Rnd + 1)
   Else
      getRandomNumber=getResource("errNonNumeric")
   End If
End Function
]]>
</script>

请参阅

脚本部件文件的内容 | 引用同一个程序包中的其他脚本部件


引用同一个程序包中的其他脚本部件

可以创建一个包含多个 Windows® 脚本部件的程序包，这样不必注册第二个脚本部件就可以实例化并使用其余的脚本部件。

例如，可以创建一个实现 Automation 接口的脚本部件，并说明了一系列属性和方法。同一个程序包中的第二个脚本部件可能实现了 ASP 接口，该接口提供了访问 Microsoft® Internet Information Services (IIS) 的服务器对象模型的途径。然后可以在 Automation 脚本部件中创建一个方法或属性来说明该 ASP 脚本部件并使其成员成为可用的。

要引用来自别的实现的脚本部件，请在一个说明第二个脚本部件的方法中创建一个框架成员 — 属性或方法。

要引用同一个脚本部件文件中的别的脚本部件

  1. 在第一个脚本部件中声明一个属性或方法。
  2. 作为新属性或方法定义的一部分，调用 createComponent 函数。

    例如，下面的代码演示了同一个程序包中的两个脚本部件。在第一个脚本部件中， math 方法简单地引用了第二个脚本部件，后者说明了 add 方法和 multiply 方法。

注意 CDATA 项是必需的，用来使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<?XML version="1.0"?>
<package>
<component id="component1">
<registration progid="Component.FrontEnd"/>
<public>
   <property name="math"/>
</public>
<script language="JScript">
<![CDATA[
var math = createComponent("component2")
   ]]>
</script>
</component>

<component id="component2">
<registration progid="Component.Math"/>
<public>
   <method name="add"/>
   <method name="multiply"/>
</public>
<script language="JScript">
<![CDATA[
function add(n1, n2){
   return n1+n2;
}
function multiply(n1, n2){
   return n1*n2;
}
]]>
</script>
</component>
</package>

要调用所引用的脚本部件，请调用完整的成员层次来获得它的方法或属性。下面的示例演示了实现这种功能的若干方式：

' 创建第一个脚本部件的实例。
set o1 = CreateObject("Component.FrontEnd")
' 直接调用第二个脚本部件的函数。
msgbox(o1.math.add(3,5))
msgbox(o1.math.multiply(3,5))
' 直接引用 math 方法创建第二个对象。
Set o2 = o1.math()
msgbox(o2.add(4,5))
msgbox(o2.multiply(4,5))

每次调用 createComponent() 函数时，都将创建所引用的脚本部件的一个新实例。如果需要在两次调用期间保留实例信息，请用一个全局变量来存储第二个脚本部件的指针，如下面的示例所示。

注意 CDATA 项是必需的，用来使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<component id="component1">
<registration progid="Component.FrontEnd"/>
<public>
   <property name="math">
      <get/>
   </property>
</public>
<script language="JScript">
<![CDATA[
var m = createComponent("component2")
function get_math(){
   return m
}
   ]]>
</script>
</component>

(Component2 见前一个示例)

请参阅

脚本部件文件的内容 | <package> | <component>


检查脚本部件文件中的错误

由于 Windows® 脚本部件是作为 COM 部件来使用的，它们通常是默默地运行。不过，在开发脚本部件文件时，您可能发现查找文件中的错误是很有用的。可以指定三种类型的错误检查：

  • 检查 XML 的正确性。详细信息请参阅脚本部件文件和 XML 一致性。
  • 允许通知语法和运行错误。缺省情况下，如果在脚本部件文件中发生错误，将显示一个一般的错误信息。通过指定错误通知，就可以让脚本部件语法分析器来显示该错误的详细信息。
  • 允许调试。缺省情况下不能对脚本部件使用脚本调试器。如果要启用调试，您可以通过设置断点、或使用 Stop (Microsoft® Visual Basic® Scripting Edition (VBScript)) 或 debugger (JScript) 语句来启动脚本调试器以响应错误。

设置错误选项

将错误选项指定为 XML <?component?> 处理指令的属性。

要指定错误检查

  • 在脚本部件文件的开头包括 <?component?> 处理指令（但应位于可选的 <?XML ?> 声明之后），在该指令内加入一条或多条下述属性：
    • error 将其设置为真，将显示脚本部件中的语法或运行错误的详细错误信息。
    • debug 将其设置为真将启用调试功能。如果没有启用该调试功能，则任何方式下都不能对脚本部件使用脚本调试器。

例如，下述代码启用了所有三种错误报告选项：

<?component error="true" debug="true"?>
提示 在将脚本部件部署到工作环境之前请将错误报告关闭。

请参阅

脚本部件文件的内容 | 使用脚本部件文件向导 | 创建注册信息 | 创建脚本部件类型库 | 脚本部件文件和 XML 一致性


脚本部件文件和 XML 一致性

Windows® 脚本部件是 XML 文件，该文件中定义的元素应该遵守 XML 1.0 版的约定。尽管 XML 元素看起来只是将 HTML 标记组合在一起，但实际 XML 是一种定义更严格的协议。例如，元素名称是区分大小写的。

为了使创建脚本部件更方便，脚本部件运行时程序 (Scrobj.dll) 允许您指定希望按哪种严格程度来解释文件中的 XML。脚本部件的 XML 可以比较宽松地加以解释，允许在标记内使用 HTML 中所用的相同的变化顺序。

不过，也可以在脚本部件文件中指定 XML 的正确性，这将导致脚本部件运行时程序按照 XML 标准来检查脚本部件文件的 XML。如果可能要使用 XML 编辑工具来操作脚本部件，则应设置 XML 正确性。

在指定 XML 正确性时，必须确保脚本部件文件遵循下述规则。

  • 元素类型和属性名称是区分大小写的。元素类型和属性名称通常是小写的，多部分名称除外，如 internalName。在严密遵守 XML 标准的 XML 文件中，所有的名称都必需准确地遵守命名规则。
  • 属性值要求用引号。属性值必须用单引号或双引号引起来。例如，如果不设置 XML 正确性，则可以在 <script> 元素中指定 language=JScript。但根据 XML 规则，则同样的属性应表述为 language="JScript"。
  • 脚本元素中的保留字符必须作为不透明的。脚本元素中频繁地包括大于号 (<) 和小于号 (>)， & 符号以及其他字符，这些符号在 XML 为保留字符。如果创建了一个严格遵守 XML 的文件，您必须确保这些保留字符不会让 XML 语法分析器糊涂。您可以逐个地用 escape 顺序标记字符（例如，将 “<” 指定为 “&lt;”），或者可以用一个 <![CDATA[ ...]]> 项将整个脚本元素围起来，从而使其成为不透明的。如果没有设置 XML 正确性，则脚本部件的 XML 语法分析器将按缺省设置把 <script> 元素作为不透明的。
    注意 如果没有指定严格遵守 XML 语法，则不要在脚本中包括 CDATA 项。如果包括了，在试图注册、实例化或调用该脚本部件时，将会报告错误。

关于 XML 标准的详细信息，请参阅 XML 特定的 Web 站点以及 Microsoft® XML Web 站点。

要指定 XML 的一致性

  • 应将 <?XML ?> 声明作为文件中的第一个元素：
    <?XML version="1.0" ?>
    注意 如果是使用脚本部件向导创建的脚本部件，则 <?XML ?> 声明已被加入到文件中，且该脚本部件的 XML 将进行严格的语法分析。

如果没有这个元素，则脚本部件运行时程序将认为不需要确认 XML 的正确性。不过，这样就可能不能使用 XML 编辑器来操作这个文件。

请参阅

脚本部件文件的内容 | 使用脚本部件文件向导 | 检查脚本部件文件中的错误


使用脚本部件

在创建 Windows® 脚本部件后，就可以在应用程序中使用它了。使用脚本部件和使用其他 COM 部件类似，不过，每个宿主应用程序在实例化 COM 部件时所使用的方法略有不同。

  • 注册脚本部件 注册脚本部件和注消脚本部件。
  • 在应用程序中使用脚本部件 在宿主应用程序中创建脚本部件的实例。
  • 在宿主应用程序中处理脚本部件的事件 检测并响应自定义的脚本部件事件。


注册脚本部件

要注册一个 Windows® 脚本部件，您必须有可用的脚本部件运行时程序 Scrobj.dll，且在计算机上已经注册。从 Microsoft® Scripting Technologies Web 站点安装脚本部件程序包时，将自动装载并在计算机上注册 Scrobj.dll。

注意 如果创建的脚本部件将由 DHTML Behavior 来进行调用，那么注册并不是必需的，因为 Microsoft® Internet Explorer 5.0 不必预先注册就可以使用这种类型的脚本部件。

本主题给出了下述信息：

  • 注册脚本部件
  • 注册可以远程实例化的脚本部件
  • 注销脚本部件

注册脚本部件

可以使用多种方法在本地计算机上注册脚本部件。

要注册一个脚本部件

  • 在 Windows 资源管理器中，用鼠标右键单击脚本部件 (.wsc) 文件，然后选择“注册”。

    –或者–

  • 使用随脚本部件程序包一起发布的新版本的 Regsvr32.exe，并使用下述命令：
    regsvr32 URL/component_name.wsc

    例如，要注册一个称为 MyComponent.wsc 的脚本部件，可以使用下面的语法：

    regsvr32 file:\\myserver\MyComponent.wsc

    –或者–

  • 如果没有随脚本部件程序包一起提供的 Regsvr32.exe 版本，则可以使用已有版本并使用类似下面的方法来注册脚本部件的运行时 DLL：
    regsvr32 scrobj.dll /n /i:URL/component_name.ext

    例如，要注册一个称为 MyComponent.wsc 的脚本部件，可以使用下面的语法：

    regsvr32 scrobj.dll /n /i:http://myserver/MyComponent.wsc

注册可以远程实例化的脚本部件

如果想要创建脚本部件的远程实例，则必须在相应的远程计算机上注册该脚本部件。此外，还必须在每个想要实例化该脚本部件的本地计算机上注册该脚本部件，以便 DCOM 能在注册表中获得起始点来查找并实例化该远程脚本部件。

要注册可以远程实例化的脚本部件

  1. 确定要远程实例化的脚本部件的程序 ID 和类 ID。
    注意 在本地计算机和远程计算机上的脚本部件必须具有相同的类 ID，因此必须在脚本部件的 <registration> 元素中提供一个类 ID。
  2. 在每个本地计算机上，创建下述注册项：
    HKEY_CLASSES_ROOT\componentProgID

    其中 componentProgID 为要实例化的脚本部件的程序 ID。

  3. 在这个新的注册项下，创建 CLSID 键并将其设置为脚本部件的类 ID，将类 ID 用括号括起来。
    提示 创建正确的注册信息的简便方法是在要被实例化该脚本部件的服务器上注册该脚本部件。然后使用 Regedit.exe 找到 HKEY_CLASSES_ROOT\componentProgID 注册项。从“注册”菜单选择“导出注册文件”，这将创建一个 .reg 文件。该文件可以发布到本地计算机，且用户只需简单地运行该文件就可以创建适当的注册项。

注消脚本部件

如果不再需要已在计算机上注册的脚本部件，您可以使用下述方法之一来取消注册：

  • 在 Windows 资源管理器中用鼠标右键单击脚本部件文件，然后选择“取消注册”。
  • 使用 -u 标志运行 Regsvr32.exe。

请参阅

创建注册信息 | 脚本部件文件的内容 | 在应用程序中使用脚本部件


在应用程序中使用脚本部件

在创建 Windows® 脚本部件后，就可以象任何 COM 部件一样，通过从宿主应用程序调用来使用该脚本部件。宿主应用程序可以是 Microsoft® Visual Basic®、C++、Microsoft® Internet Explorer 或者其他应用程序。

注意 为 DHTML Behavior 所编写的脚本部件与传统的 COM 对象的实例化有所不同。详细信息请参阅 Microsoft Site Builder Network (SBN) Web 站点上的“使用 DHTML Behavior”。

根据宿主应用程序、所使用的脚本部件类型，以及部署该脚本部件的位置，在创建脚本部件的实例时会有各种选项。不过，其中最主要的差别是在本地（即与应用程序在同一个计算机上）还是远程（在别的计算机上）创建脚本部件的实例。

不管是哪种情况，都有一些是需要牢记的。如果创建了脚本部件的实例，又使用该实例更改了 .wsc 文件，也不会更新该部件的这个实例。要更新，必须创建该脚本部件的一个新实例。

所能使用的所有属性和方法就是在脚本部件文件的 <public> 元素和脚本中所定义的。如果所用的环境支持语句完善，例如 Visual Basic，则在生成并使用类型库时将能够看到脚本部件的属性和方法。详细信息请参阅创建脚本部件类型库。

如果创建脚本部件的实例失败，可能是由于脚本部件文件中的语法或运行时错误造成的。任何 XML 元素（包括 <registration> 元素）的语法分析错误都会导致实例化操作失败。在开发脚本部件文件时，可以按照检查脚本部件文件中的错误所描述的，在 <?component?> 处理指令中设置错误检查选项。

提示 为了让宿主应用程序方便地了解脚本部件所说明的 COM 接口，脚本部件运行时程序可以生成一个类型库，其中包含了有关该脚本部件中可用的属性、方法和事件的信息。详细信息请参阅创建脚本部件类型库。

创建脚本部件的本地实例

如果脚本部件与宿主应用程序安装在同一个计算机上，则可以按照注册脚本部件所描述的，将脚本部件注册为该计算机的部件。然后就可以使用宿主应用程序的标准方法来创建对象实例，如 CreateObject 函数。例如，假设已注册了一个程序 ID 为 component.MyComponent 的脚本部件，如果要在 Visual Basic 中创建该脚本部件的一个实例，则可以使用下面这条语句：

Set oComponent = CreateObject("Component.MyComponent")
注意 如果宿主应用程序是 Visual Basic，并且要处理由脚本部件激活的事件，则必须用一个包括 WithEvents 关键字的 Dim 语句早期绑定该对象，如下所示：
Dim WithEvents scMyComponent As MyComponent
Private Sub Command1_Click()
   Set scMyComponent=CreateObject("MyComponent")
End Sub
注意 详细信息请参阅在宿主应用程序中处理脚本部件的事件。如果不想给脚本部件事件编写处理程序，则这是不必要的。

在 Web 页面上，可以使用 <OBJECT> 标记来创建脚本部件的实例。您必须知道该脚本部件的类 ID，并在 <OBJECT> 标记中包括这个类 ID，如下例所示：

<OBJECT
   ID="oComponent"
   CLASSID="clsid:855c8606-49ba-11d2-a428-00c04f8ec80b">
</OBJECT>

如果脚本部件不是在本地计算机上注册的，您可以使用该脚本部件的别名来创建其实例。在诸如 GetObject 的函数中支持别名。本地计算机上必须注册有脚本部件运行时程序 Scrobj.dll。

注意 由于安全性方面的原因，Microsoft® Internet Explorer 上的脚本部件不支持 GetObject 函数。

例如，下面演示了如何调用 Visual Basic 的 GetObject 函数来创建未注册的脚本部件的实例：

Set oComponent = GetObject("script:c:\COM\MyComponent.wsc")

如果别名所引用的 .wsc 文件包含多个脚本部件，可以用散列符号(#)作为分隔符，在文件名后加上具体的脚本部件的名字来指定要实例化的脚本部件。下面的代码将创建一个 ID 为 “math”，包含在 MyComponent.wsc 文件中的脚本部件的实例：

Set oComponent = GetObject("script:c:\COM\MyComponent.wsc#math")

使用 URL 别名可以创建位于别的计算机（如 Web 服务器）上的脚本部件的实例。应使用完整的 URL (带 http 协议) 来表示脚本部件的位置，如下例所示：

Set oComponent = GetObject("script:http://myserver/MyComponent.wsc")

Internet Explorer 5.0 支持使用 DHTML Behavior 语法来创建脚本部件的实例，该方法与传统的实例化对象的语法有些不同，并且能确保脚本部件不能访问可能不太安全的系统对象。相应的示例请参阅 Microsoft Site Builder Network (SBN) Web 站点上的使用 DHTML Behavior。

创建脚本部件的远程实例

如果脚本部件的 <registration> 元素的远程属性已设置为 “true”，则可以使用分布式 COM (DCOM) 从别的计算机上远程实例化该脚本部件。

两个计算机都必须安装了基本的 DCOM。如果计算机使用的下述软件之一，则已经正确配置了 DCOM：

  • Windows NT 4.0
  • Windows 95，且运行 Internet Explorer 4.0
  • Windows 95，且带有 OEM Service Release 2 (OSR2) 或更新版本。详细信息请参阅 Microsoft® Web 站点上的 Windows 95 OSR2 页面。
  • Windows 95，且带有 DCOM for Windows 95, 1.2 版。详细信息请参阅 Microsoft® Web 站点上的 DCOM for Windows 95 页面。

脚本部件本身必须按照下面的要求部署：

  • 对本地计算机，在实例化该脚本部件时，既不需要脚本部件的文件 (.wsc 文件)，也不需要脚本部件运行时程序 (Scrobj.dll)。不过，在本地 Windows 注册表中必须有 DCOM 所需的远程脚本部件引用。详细信息请参阅注册脚本部件。
  • 对远程计算机，需要脚本部件以及脚本部件运行时程序。两者都要注册。

在创建远程脚本部件的实例时，在应用程序内它将象一个本地对象一样工作；您可以正常地调用其方法以及获取和设置其属性。不过，该远程脚本部件的脚本是在远程机器上运行的，并访问该计算机的资源（在许可的任何安全性限制之内）。本地计算机上的宿主应用程序和远程机器上的脚本部件之间的通信由 DCOM 自动处理的，因而是不可见的。

要创建脚本部件的远程实例，可以调用 CreateObject 方法，并将远程计算机的名称作为一个参数传递给该方法。

注意 使用 CreateObject 来实例化远程脚本部件的能力要求 Visual Basic 6.0 或更新版本，或者 VBScript 5.0 或更新版本。

下面的 Visual Basic 示例演示了如何远程实例化在名为“myserver”的计算机上的脚本部件：

Set newS = CreateObject("Component.MyComponent", "myserver")
注意 在首次实例化一个远程脚本部件时，由于 DCOM 要建立两个计算机之间的通信，因而可能会有些延迟。

请参阅

创建注册信息 | 创建脚本部件 | 脚本部件是如何运作的 | 脚本部件简介 | 注册脚本部件


在宿主应用程序中处理脚本部件的事件

大多数宿主应用程序都可以象接收任何其他事件一样接收 Windows® 脚本部件事件。不过，有些宿主应用程序在接收脚本部件事件之前需要进行一些设置。

注意 如果创建的是一个 Behavior 脚本部件，则事件是使用 DHTML 对象模型来说明的。详细信息请参阅在 Behavior 脚本部件中说明自定义事件。

例如，在 Visual Basic 中，要接收事件必须对该部件使用事先（编译时）绑定。事先绑定要求有一个类型库，因此必须为脚本部件生成一个类型库。详细信息请参阅创建脚本部件类型库。此外，在声明该部件的对象变量时，必须指定 WithEvents 关键字。（ Dim 语句中所用的类名称就是在脚本部件的 <component> 元素中所指定的 ID。）

下面是一个 Visual Basic 示例：

Dim WithEvents Scriptlet1 as MyScriptlet
Set Scriptlet1 = CreateObject("MyScriptlet")
Sub Scriptlet1_namechanged
   MsgBox("Value of name property changed")
End Sub

请参阅

说明事件


实现 ASP 脚本部件

使用 Windows® 脚本部件可以包括 Active Server Page (ASP) 的功能。这样做使您可以将服务器的脚本隔离在一个可以很容易从 ASP 页面调用的部件内，且有助于 ASP 代码的复用。例如，可能拥有若干个处理表格的 ASP 页面。但不必在每个 ASP 页面都直接实现所有的表格处理逻辑，因为所有 ASP 页面都可以调用一个已创建的具有表格处理逻辑的脚本部件。

要创建 ASP 脚本部件，只需按照脚本部件文件的内容中所描述的，正常创建一个脚本部件。使用 <implements> 元素来实现 ASP 接口处理程序，即将<implements> 元素的 type 属性设置为 “ASP” 。这样就提供了访问 ASP 对象(Response, Request, Server, Session 以及 Application)的手段。在 ASP 脚本部件中，可以象直接在 ASP 页面内那样使用这些对象。ASP 接口处理程序已内置于脚本部件的运行时程序 (Scrobj.dll)，因此不需要外部接口处理程序。

脚本部件运行时，它将使用与调用它的 ASP 页面相同的命名空间。该脚本部件可以访问 Request 和 Server 对象，如同它就位于调用它的 ASP 页面。该脚本部件还可以访问相同的调用 ASP 页面的 Session 和 Application 变量。类似地，如果该 ASP 脚本部件调用了 Response 对象的一个方法，这些调用的结果在调用页面上也是可获得的。例如，如果调用 Response.Write，则结果将直接输出到调用的 ASP 页面。

下面演示了一个简单的 ASP 脚本部件，它说明了一个属性和一个方法。applicationVar1 属性可以取得假想的 Application 变量 Var1 的值。AddDate 方法则将当前日期输出到调用 ASP 页面。

注意 CDATA 项是必需的，它使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<component id="ASPScriptlet">
<registration progid="ASPScriptlet"/>

<public>
   <property name="applicationVar1"/>
   <method name="AddDate"/>
</public>

<implements type="ASP"/>
<script language="VBScript">
<![CDATA[
dim applicationVar1
applicationVar1 = Application("Var1")
Sub AddDate()
   Response.Write(Date)
End Sub
]]>
</script>
</component>

对 ASP 页面的调用如下：

<HTML>
<HEAD>
<TITLE>Testing the Script Components ASP Handler</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFFF">
<H1>Testing the ASP Handler</H1>
<%Set wscASP = CreateObject("ASPScriptlet")%>
<P>The current date is <%= wscASP.AddDate()%></P>

<P>The value of the Application(Var1) variable is <%= wscASP.applicationVar1%></P>

</BODY>
</HTML>


实现 DHTML Behavior 脚本部件

Windows® 脚本部件提供了一种开销较小、易于维护的方式，可以创建用来实现 Microsoft® Internet Explorer 5.0 的 DHTML Behavior 的部件。通过使用脚本部件，脚本开发人员可以使用 Microsoft® Visual Basic® Scripting Edition (VBScript)、Microsoft® JScript® (ECMAScript) 或任何支持 Microsoft® ActiveX® Scripting 接口的第三方脚本语言来实现操作。

关于 DHTML Behavior 的一般信息，请访问 http://msdn.microsoft.com/workshop。

通过创建 Behavior 脚本部件，可以：

  • 通过将脚本部件的函数绑定到包含文档中产生的事件来说明操作，不管是为特定的元素，还是为 DHTML 文档 或 DHTML 窗口对象。
  • 定义布局，其中包括在调用该操作时插入到包含文档中的 HTML 文本。
  • 说明自定义属性方法，从而将元素的成员集合扩展到包含页面。
  • 说明自定义事件，脚本部件可以在任何时候激活这些事件。例如，脚本部件可以在更改了页面上的某个 DHTML 元素的内容后激活一个自定义事件。
  • 将脚本部件的函数绑定到某些标准事件，如载入文档或元素的内容被更改时。

可以在本节找到有关下述内容的信息：

  • 创建 Behavior 脚本部件 了解 Behavior 脚本部件文件中可以加入哪些元素，如何与包含文档共享信息，哪些 DHTML 特性可应用于 Behavior 脚本部件，以及在执行脚本时如何观察。
  • 在 Behavior 脚本部件中说明属性和方法 创建属性和方法，扩充 DHTML 元素中已经可用的属性和方法。
  • 在 Behavior 脚本部件中说明自定义事件 在脚本部件中为包含文档说明和激活事件。
  • Behavior 处理程序参考 Behavior 脚本部件中所使用的 XML 元素、属性和方法清单。

请参阅

Microsoft Web 站点的 Site Builder Network (SBN) 上的“DHTML Behavior”和“使用 DHTML Behavior”主题提供了有关 DHTML Behavior的一般信息。


创建 Behavior 脚本部件

创建 Behavior 脚本部件与创建任何其他类型的脚本部件类似，只是需要将 Microsoft® Internet Explorer 的事件链接到为响应这些事件而运行的脚本。

本主题分为下述部分：

  • 创建 Behavior 脚本部件文件
  • 对 DHTML 对象模型所做的与 Behavior 有关的增强
  • 在脚本部件中获取事件参数
  • 范围规则
  • 时序注意事项

创建 Behavior 脚本部件文件

Behavior 脚本部件包括一个 <implements> 元素，用来指定 Behavior 接口处理程序。在 <implements> 元素内，可以使用：

  • <attach> 元素将来自包含文档的事件绑定到在脚本部件的独立的 <script> 元素中创建的函数。
  • <layout> 元素定义要插入到包含文档中的 HTML 文本。
  • <event> 元素定义将由脚本部件激活的自定义事件。

Behavior 脚本部件还可以包括自定义属性和方法，以扩大包含文档中的元素已经可用的属性和方法。详细信息请参阅在 Behavior 脚本部件中说明属性和方法。

下面的示例演示了一个 Behavior 脚本部件，只要鼠标从包含页面中的某个元素上经过，该脚本部件就会更改该元素的颜色。为了实现这一点，该示例将 DHTML 的 onmouseover 和 onmouseout 事件绑定到脚本小程序中设置元素的 DHTML 样式属性的函数。通过绑定到 DHTML 窗口对象的 onload 事件，该示例还可以在初始化该文档时设置文档的链接颜色。

除了将事件绑定到脚本，脚本部件还可以将文本插入包含文档中的任何 <H1> 元素中，该文档被链接到该脚本部件。最后，它还说明并激活了一个称为 onchange 的事件，该事件使用一个称为 newvalue 的自定义属性扩展了 DHTML 窗口对象的事件对象。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<?XML version="1.0"?>
<component>
<implements type="Behavior">
   <comment> 当鼠标经过包含文档的该元素时，
   下面的代码将将调用 do_nmousedown 和
   do_mouseout 函数。</comment>

   <attach event="onmouseover" handler="do_onmouseover"/>
   <attach event="onmouseout" handler="do_onmouseout"/>

   <comment> 当窗口的 onload 事件被激活时，
   这些代码将调用 init 函数。</comment>

   <attach for="window" event="onload" handler="docinit"/>

   <comment> 下面定义了将出现在
   包含文档中的 HTML 文本。</comment>

   <layout>
      <h1>This is the HTML to show in the element</h1>
   </layout>

   <comment> 下面定义了一个自定义事件，该事件将
   通过脚本部件内的 fireEvent 方法被激活。</comment>

   <public>
      <event name="onchange"/>
   </public>

</implements>
<script language="JScript">
<![CDATA[
var normalColor, normalSpacing;
function do_onmouseover(){
   // 保存原始值。
   normalColor = style.color;
   normalSpacing= style.letterSpacing;
   style.color = "red";
   style.letterSpacing = 2;
   oEvent = createEventObject();
   oEvent.newcolor = "red";
   fireEvent("onchange",oEvent);
}
function do_onmouseout(){
   // 恢复原始值
   style.color = normalColor;
   style.letterSpacing = normalSpacing;
}

function docinit(){
   document.linkColor = "red";
}
]]>
</script>
</component>

在前面的代码中有一些情况需要说明：

  • 在脚本部件过程内，事件处理程序中的 this 隐含指针指向包含的函数，而不是激活该事件的元素。
  • 如同在 HTML 页面内一样，可以在脚本部件的 <script>内放置内嵌脚本。在这个实例中，全局变量 normalColor 和 normalSpacing 都是在内嵌脚本中定义的。
    注意 内嵌脚本是在将操作应用于元素之前执行的，这将限制哪些语句可以在内嵌脚本中执行。例如，如果该示例中的某个操作说明了一个称为 hiliteColor 的属性，内嵌脚本可以直接引用 hiliteColor （换句话说，它直接解析该脚本部件的命名空间）。不过，如果在内嵌脚本中使用 Behavior.element.hiliteColor 的形式来引用hiliteColor 则是不合法的，因为此时该操作尚没有应用于该元素。详细信息请参阅本主题稍后的范围规则 以及时序注意事项。

对 DHTML 对象模型所做的与 Behavior 有关的增强

下面是为了增加对操作的支持， Microsoft® Internet Explorer 5 对 DHTML 对象模型所做的增强。

  • 级联式样式表 (CSS) 操作属性指定该操作的位置。
  • DHTML 的 attachEvent 和 detachEvent 方法使 Behavior 脚本部件可以接受来自包含的页面的事件通知，它是通过指定一个当对象激活事件时用来调用的函数来实现。
  • 使用 DHTML 的 uniqueID 属性可以让操作脚本部件给该元素分配一个 ID。当脚本部件将代码插入包含页面以及需要指定要应用该操作的元素 ID 时，这个属性是很有用的。

在脚本部件中获取事件参数

在 DHTML 中，DHTML 事件对象提供了事件的有关信息。尽管在 DHTML 中事件处理程序可以通过 DHTML 窗口对象来访问事件对象，但在操作脚本部件中事件对象是作为一个参数传递给事件处理程序的。

下面的代码来自一个虚构的计算器脚本部件，其中将键盘和鼠标事件都绑定到称为 doCalc 的脚本部件函数。doCalc 函数使用该事件对象来获取有关激活该事件的情况的信息。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<implements type="Behavior">
   <attach event="onclick" handler="doCalc"/>
   <attach event="onkeydown" handler="doCalc"/>
</implements>

<script language="jscript">
<![CDATA[
function doCalc(oEventParam){
   oElement = oEventParam.srcElement;
   if(oEventParam.type == "keydown"){
      sVal = KeyCodeToChar(oEventParam.keyCode);
   }
   else{
      if (oEventParam.srcElement.type != "button"){
         return;}
      sVal = stripBlanks(oEventParam.srcElement.value);
   }
}
// 此处为其他脚本。
]]>
</script>

范围规则

在使用脚本部件时，实际使用了三个命名空间：操作、元素、以及包含文档。范围规则就是定义在操作脚本部件中解决名称冲突的顺序。名称冲突将按下面的顺序进行分析：

不管是变量、操作定义的属性、方法或事件，该名称都将被解析为由脚本部件的任何操作所定义的名称。

如果解析失败，则将该名称作为应用于该元素的属性、方法或事件来解析。

最后，该名称将作为应用于包含页面的窗口对象的属性、方法或事件的名称。

在下面的示例中，请注意如何使用上面的范围规则来解析这些名字：

  • normalColor 解析为由脚本开始处的操作所定义的变量。
  • style 解析为包含文档中的元素的样式属性。
    <implements type="Behavior">
   <attach event="onmouseover" handler="do_onmouseover"/>
   <attach event="onmouseout "handler="do_onmouseout"/>
</implements>

<script language="JScript">
<![CDATA[
var normalColor, normalSpacing;
function event_onmouseover()
{
   // 保存原始值。
   normalColor = style.color;
   normalSpacing = style.letterSpacing;

   style.color = "red";
   style.letterSpacing = 2;
}
function event_onmouseout()
{
   // 恢复原始值。
   style.color = normalColor;
   style.letterSpacing = normalSpacing;
}
]]>
</script>

时序注意事项

在创建操作时，了解何时将操作应用于元素是很重要的。在操作被应用之前，脚本不能访问操作所定义的属性值，因为这些值可能是在文档中设置的。

由于操作被封装在与 HTML 文档不同的独立文件中，它和该文档的其他部分是分开下载的。在分析和载入文档和操作时，该操作通过用 attachNotification 方法指定的函数来接收通知。目前，可以使用“contentChange”或“documentReady” 通知来通知操作。在对已绑定该操作的元素内容进行分析后，只要该元素的内容被更改后就会发送“contentChange”通知。而“documentReady”通知是在下载并分析该文档后发送的。

由于只要实例化该操作，就会执行脚本部件文件中的内嵌脚本，因此在内嵌脚本中那些由操作定义的将在文档中设置的属性值可能无法被访问。不过，这些属性在首次发送 “contentChange”通知后就是可用的。

请参阅

在 Behavior 脚本部件中说明属性和方法 | 在 Behavior 脚本部件中说明自定义事件 | Behavior 处理程序参考


在 Behavior 脚本部件中说明属性和方法

Behavior 脚本部件可以用一种与 Automation 脚本部件类似的方法来说明自定义属性和方法。Behavior 脚本部件的属性和方法将可用的属性和方法扩展到包含页面内的各个元素。例如，可以创建一个操作脚本部件，当鼠标移动到某个元素上时，就更改该元素的颜色。通过在脚本部件中定义一个属性，就可以在该文档中获得一个自定义属性，例如可以叫做 hiliteColor，这样 Web 页面制作者就可以设置用什么颜色来高亮显示文本。

通过说明一个与已经为元素定义的同名属性或方法，可以用一个操作来覆盖该元素的缺省操作。

属性和方法在 <public> 元素内定义，与用来指定 Behavior 处理程序的 <implements> 元素是分开的。详细信息请参阅说明属性和说明方法。

说明属性

属性在所有脚本部件中都是在 <public> 元素中说明的。下面的脚本部件片段演示的 Behavior 脚本部件说明了自定义属性 hiliteColor。如果包含页面没有特别设置该属性的值，则其缺省值设置为 “red” 。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <property name="hiliteColor"/>
</public>

<implements type="Behavior">
   <attach for="window" event="onload" handler="event_onload">
</implements>

<script language="JScript">
<![CDATA[
   var hiliteColor;
   function event_onload(){
      // Initialize the properties.
      if (hiliteColor == null){
         hiliteColor = "red";}
   }
   // Further script here.
]]>
</script>

说明方法

在 Behavior 脚本部件中说明方法与在 Automation 脚本部件中一样。详细信息请参阅说明方法。在 Behavior 脚本部件中，在脚本部件中说明的方法扩大了包含文档的元素已经可用的方法。

请参阅

在 Behavior 脚本部件中说明自定义事件


在 Behavior 脚本部件中说明自定义事件

与 Automation 脚本部件类似，Behavior 脚本部件可以说明自定义事件。这些事件可以在脚本部件内激活，并在包含文档内进行处理。事件可以按下述方法在 <public> 元素内声明：

<public>
   <event name="onResultChange" />
</public>

然后，就可以在脚本中通过调用 fireEvent 方法来激活该事件：

<script language="JScript">
   // 此处为其他代码。
   fireEvent("onResultChange");
   // 此处为其他代码。
</script>

通过说明与元素已经定义的同名事件，一个操作可以覆盖该元素的缺省操作。例如，说明了 onclick 事件的操作可以覆盖该元素缺省的 onclick 事件。

获取和设置自定义事件信息

自定义的脚本部件事件可以访问 DHTML 事件对象，该对象负责保存事件特有的信息。使用这个对象可以：

  • 更改已有的事件对象属性，诸如 keyCode，这些属性可能通过调用事件被设置过。
  • 创建事件对象的新的(expando) 属性，以便将该事件的有关信息传回包含事件。

在脚本部件的代码中，调用 createEventObject 方法来创建事件对象的新实例，然后对这个新的事件对象设置一个或多个属性。当调用 fireEvent 方法时，可以用事件名称来传递这个新的事件对象。

要创建一个新的 expando 属性，只需在脚本中给其赋值时命名。下面演示了如何为事件对象创建一个名为 myprop 的新属性：

oEvent = createEventObject();
oEvent.myprop = "a new value"
注意 只有当使用 Microsoft® JScript® (或 JavaScript) 时才可以创建 expando 属性。Microsoft® Visual Basic® Scripting Edition (VBScript) 中不支持这一特性。

示例

下面的脚本部件片段是从 calculator 脚本部件示例中摘出来的。该示例定义了一个 onResultChange 事件，只要结果被更改，就会为包含文档激活这个事件。事件特有的信息（实际的计算结果）将通过称为 result 的 expando 属性来传递。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <event name="onResultChange" />
</public>

<implements type="Behavior">
   <attach event="onclick" handler="doCalc"/>
</implements>

<script language="JScript">
<![CDATA[
function doCalc()
{
   // 此处为进行计算的代码。结果写入
   // sResult 变量。
   oEvent = createEventObject();
   oEvent.result = sResult;
   fireEvent("onResultChange",oEvent);
}
]]>
</script>

下面演示了包含页面的样式。在 onResultChange 事件被激活时，就从 DHTML 的 window.event 对象的 expando 属性 result 提取出计算结果，并在 resultWindow <DIV> 元素中显示该结果。

<HTML>
<HEAD>
<xml:namespace prefix="LK" />
<style>
   LK\:CALC {behavior:url(calc.wsc)}
</style>
<script language="JScript">
function showResults(){
   resultWindow.innerText=window.event.result;
}
</script>
</HEAD>

<LK:CALC id="myCalc" onResultChange="showResults()">
<TABLE>
<TR>
   <DIV ID=resultWindow
      STYLE="border: '.025cm solid gray'"
      ALIGN=RIGHT>0.</DIV>
</TR>
<TR>
   <TD><INPUT TYPE=BUTTON VALUE=" 0 "></TD>
   <TD><INPUT TYPE=BUTTON VALUE="+/-"></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" . "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" + "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" = "></TD>
<TR>
</TABLE>
</LK:CALC>
</HTML>

请参阅

在 Behavior 脚本部件中说明属性和方法


脚本部件参考

在创建 Windows® 脚本部件文件时，可以使用 XML 元素来定义脚本部件的不同部分，诸如注册信息、脚本以及在脚本部件的代码中要引用的对象。此外还可以在脚本部件中调用方法来执行任务。下表列出了可用的 XML 元素和方法。

注意 具体的处理程序，诸如 Behavior 处理程序，还说明了其他的 XML 元素、方法以及其他成员。详细信息请参阅具体处理程序的文档。

XML 元素

  • <?component?>
  • <?XML ?>
  • <comment>
  • <component>
  • <event>
  • <implements>
  • <method>
  • <object>
  • <package>
  • <property>
  • <public>
  • <reference>
  • <registration>
  • <resource>
  • <script>

方法和函数

  • createComponent
  • fireEvent
  • getResource


<?component?>

指定用于错误处理的属性。

<?component error="flag" debug="flag" ?>

值

flag
为一个布尔值： “true” 或 “false”、 1 或 0、或者是 “yes” 或 “no” 。所有属性的缺省值都为 false。

说明

由于脚本部件是作为 COM 部件来使用的，它们通常都是静静地运行。不过，在开发脚本部件时，如果能告知文件中的错误将是很有用的。您可以指定错误通知的类型：

  • error 将其设置为真，将显示脚本部件中的语法或运行错误的详细错误信息。
  • debug 将其设置为真将启用调试功能。如果没有启用该调试功能，则任何方式下都不能对脚本部件使用脚本调试器。

示例

<?component error="true" debug="true" ?>

请参阅

检查脚本部件文件中的错误 | 脚本部件文件的内容


<?XML?>

Windows 脚本部件

<?XML ?>

指明该文件应按 XML 进行语法分析。

<?XML version="version" standalone="DTDflag" encoding="encname" ?>

值

version
格式为 n.n 的字符串，指定该文件的 XML 级别。可以使用 1.0。
DTDflag
(可选项) 是一个 Boolean 值，指明该 XML 文件是否包括外部文档类型定义 (DTD) 的引用。脚本部件的 XML 文件不能包括这样的引用，因此这个属性的值始终为 “yes” 。
encname
(可选项) 描述 XML 文档所使用的字符集编码的字符串，该字符串包括 Microsoft® Internet Explorer 所支持的任何字符集。

说明

这个声明必须是文件的第一个元素（包括空格）。

如果有这个声明，则将使脚本部件编译程序采用严格的 XML 模式，这时元素类型和属性名称都是区分大小写的，属性值必须用单引号或双引号引起来，且分析所有的元素。如果没有包括这个声明，则编译程序将允许较为松散的语法。

通常，如果可能要用 XML 编辑器来编辑该脚本部件文件，则应该包括这个声明并遵循 XML 约定。

示例

<?XML version="1.0" standalone="yes" encoding="UTF-16" ?>

请参阅

脚本部件文件和 XML 一致性


<comment> 元素

标记脚本部件文件中需要忽略的文本。

<comment>
      在此处书写文本
</comment>

说明

可以在其他 XML 元素内使用 <comment> 元素来包围既不是标记，也不是数据，而是用作其他用途的文本，例如文档编制。

示例

下面的脚本部件片段演示了位于 <public> 元素内的一个 <comment> 元素。

<public>
   <comment>
      此处实现了一个 Automation 部件，其中包括
      "random"  方法和 "uppercaseName" 属性。
   </comment>
   <method name="random" internalName="getRandomNumber"/>
   <property name="uppercaseName">
      <get internalName="get_ucname"/>
      <put internalName="put_ucname"/>
   </property>
</public>

请参阅

脚本部件文件的内容


createComponent 函数

返回同一个程序包(.wsc 文件)中别的脚本部件的引用。

value = createComponent(componentID)

值

componentID
代表要创建其实例的脚本部件的唯一标识符。

说明

通过调用 createComponent 方法，可以包括同一个文件中别的脚本部件的功能。详细信息请参阅引用同一个程序包中的其他脚本部件。

示例

下面的代码演示了同一个程序包中的两个脚本部件。第一个脚本部件在调用 math 方法时将调用第二个脚本部件。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<package>
<component id="component1">
<registration progid="component.FrontEnd"/>
<public>
   <method name="math"/>
</public>
<script language="JScript">
<![CDATA[
function math(){
   return createComponent("component2")
}
]]>
</script>
</component>

<component id="component2">
<registration progid="component.Math"/>
<public>
   <method name="add"/>
</public>
<script language="JScript">
<![CDATA[
function add(n1, n2){
   return n1+n2;
}
]]>
</script>
</component>
</package>

在注册该程序包之后，就可以按下面命令所演示的方法来使用该程序包：

set o1 = CreateObject("component.FrontEnd")
Set o2 = o1.math()
msgbox(o2.add(4,5))

请参阅

引用同一个程序包中的其他脚本部件


<event> 元素

声明自定义事件的名称，该事件可以从脚本部件内被激活。

<event name="name" dispid="dispid"/>

值

name
要说明的事件名称。
dispid
(可选项) 代表该事件的派遣 ID 的一个数值，该数值将编译到部件的类型库中，然后由主机应用程序用来绑定事件。如果没有指定派遣 ID，则在创建类型库时将自动给该事件指定一个。自己指定派遣 ID 可以确保该事件的派遣 ID 始终是一样的，即使重新创建类型库也是如此。另外，这样还可以把事件映射到一个特定的派遣 ID，诸如 COM 中通常所使用的那些 ID。详细信息请参阅说明事件。

说明

要激活一个事件，请使用 fireEvent 方法。

示例

下面的脚本部件片段定义了两个事件 (namechanged 和 querydone)，并演示了如何激活其中之一 (namechanged)。

注意 CDATA 项是必需的，用来使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <property name="name">
      <get/>
      <put/>
   </property>
   <event name="namechanged"/>
   <event name="querydone" dispid="22"/>
<public>

<script language="VBScript">
<![CDATA[
var gName
Sub get_lowercaseName()
   get_lowercaseName = name
End Sub

Sub put_lowercaseName(newLCName)
   gName = newLCName
   fireEvent("namechanged")
End Sub
   ]]>
</script>

请参阅

<method> 元素 | <property> 元素 | 说明事件 | 说明方法 | 说明属性 | fireEvent 方法


fireEvent 方法（Windows 脚本部件）

Windows 脚本部件

fireEvent 方法

将来自脚本部件的自定义事件的通知发送到主机应用程序。

fireEvent(eventName[,...])

值

eventName
在 <event> 元素中定义的事件名称。

说明

只能激活那些已经在 <public> 元素中声明的事件。

注意 Behavior 处理程序说明了一个与 Automation 处理程序的版本类似的 fireEvent 方法，但该方法支持事件对象。详细信息请参阅在 Behavior 脚本部件中说明自定义事件。

示例

下面的脚本部件片段定义了一个 namechanged 事件并演示了如何激活该事件。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <property name="name">
      <get/>
      <put/>
   </property>
   <event name="namechanged">
</public>

<script language="VBScript">
<![CDATA[
var name
Sub get_lowercaseName()
   get_lowercaseName = name
End Sub

Sub put_lowercaseName(newLCName)
   name = newLCName
   fireEvent("namechanged")
End Sub
]]>
</script>

请参阅

<event> 元素 | 说明事件 | fireEvent (Behavior)


getResource 函数

取得用 <resource> 元素定义的资源的值。

value = getResource(resourceID)

值

resourceID
在脚本部件内代表该资源的唯一标识符。

说明

使用 <resource> 元素可以将脚本部件内的字符串或数值隔离开，但又可以在脚本部件的脚本中使用这些资源。例如，资源元素通常用来保存那些可能需要本地化为别的语言的字符串。您可以在脚本部件的脚本内使用 getResource 函数来提取 <resource> 元素的内容。

示例

下面的脚本部件片段定义了一个资源（称为 errNonNumeric），并演示了在脚本中如何使用该资源。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <method name="random" internalName="getRandomNumber"/>
</public>
<resource id="errNonNumeric">Non-numeric value passed</resource>

<script language="VBScript">
<![CDATA[
Function getRandomNumber(upperBound)
   If IsNumeric(upperBound) Then
      getRandomNumber = Cint(upperBound * Rnd + 1)
   Else
      getRandomNumber=getResource("errNonNumeric")
   End If
End Function
]]>
</script>

请参阅

引用其他部件


<implements> 元素

给脚本部件指定别的 COM 接口处理程序。

<implements type="COMHandlerName" [id="internalName"] [default=fAssumed]>
      此处为处理程序的专门信息
</implements>

值

COMHandlerName
要引用的接口处理程序的名称。接口处理程序通常是作为 DLL 实现的，因此必须确保有这个 DLLs，并且已经在脚本部件的开发环境中注册。有些处理程序，诸如 Automation 和 ASP 处理程序，已内置于脚本部件的运行时程序 (Scrobj.dll)。可用的接口处理程序示例包括：
接口处理程序 | 描述 | 如何实现的
ASP | 使脚本小程序可以访问 Microsoft Internet Information Services (IIS) 的 Active Server Page (ASP) 对象模型。 | 已内置于 Scrobj.dll
DHTML Behaviors | 允许 behavior 脚本部件与包含页进行通信，因此它可以激发事件并访问 DHTML 对象模型。 | 已内置于 Scrobj.dll
internalName
(可选项) 在脚本中用来引用该处理程序的名称。缺省情况下，脚本部件的属性、方法、事件以及其他成员在全局命名空间都是可用的。不过，如果在各个 <implements> 元素之间存在命名冲突，可以在名字前面加上所属的 <implements> 元素 ID 加以区分，如下所示：
<implements type="Behavior" id="sctBehavior">
   [...]
</implements>

[...]

<script language="JScript">
   // [...]
   sctBehavior.fireEvent("onResultChange",oEvent);
</script>
fAssumed
(可选项) 一个 Boolean 标记，指明假定在脚本中使用 internalName。该属性的缺省值为 true，且由处理程序说明的对象模型的成员都将添加到全局脚本命名空间，并可以不加限制地访问。如果要将该属性设置为 false，并因此隐藏某个特定的 <implements> 元素的成员，只需包括这个属性。

说明

接口处理程序扩展了脚本部件运行时程序。接口处理程序是一个预先编译好的部件（通常用 C++ 编写），实现了特定 COM 接口。

缺省情况下脚本部件将实现 COM Automation 接口（具体说，就是 IDispatchEx COM 接口）。Automation 对象的属性、方法和事件都是在脚本部件的 <public> 元素中定义的。由于缺省实现的就是 Automation 处理程序，因此不必使用 <implements> 元素去实现它。

通过包括 <implements> 元素，脚本部件还可以实现附加的 COM 接口。在 <implements> 元素内，可以指定要实现接口的特定信息。每个接口处理程序需要不同的信息。例如，Behavior 脚本部件可以包括 <attach> 以及 <layout> 元素，这两个元素是 DHTML Behavior 接口特有的。

示例

<implements type="Behavior">
   <event name="onResultChange" />
</implements>

请参阅

脚本部件是如何运作的 | 脚本部件文件的内容


<method> 元素

声明一个方法。

<method name="methodName" internalName="functionName" dispid=dispID>
      [<parameter name="parameterID"/>]
</method>

值

methodName
要说明的方法名称。
functionName
(可选项) 在脚本部件中实现该方法的过程（函数或子程序）名称。如果没有指定内部名称，则使用methodName。
提示 在 XML 中，可以实现没有内容的元素（如 <method> 元素），方法是用 /> 来结束该元素。
dispID
(可选项) 该方法的 COM 派遣 ID。如果没有指定 dispid，则将自动生成 dispid。如果 dispid 设为 0，则该方法将称为脚本部件的缺省方法。关于 dispid 的详细信息，请参阅说明事件。
parameterID
如果给该方法显式声明了参数，则这个值标识该参数的名称。

说明

方法是在单独的 <script> 元素中作为过程（函数或子程序）来实现的。<method> 元素将该方法名映射到实现该方法的过程。

可以有选择地声明方法的参数。这样做并不是必需的，但是如果要为脚本部件生成类型库，则应说明参数信息（请参阅 创建脚本部件类型库）。

示例

下面的脚本部件片段定义了两个方法(factorial 和 random)。random 方法包括了其参数的定义，并绑定到一个称为 getRandomNumber 的函数。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本是不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <method name="factorial"/>
   <method name="random" internalName="getRandomNumber">
      <parameter name="upperBound">
      <parameter name="seed">
   </method>
</public>

<script language="VBScript">
<![CDATA[
   Function factorial(n)
      If isNumeric(n) Then
         If n <= 1 Then
            factorial = 1
         Else
            factorial = n*factorial(n-1)
         End If
      Else
         factorial = -2    '错误代码。
      End If
   End Function

   Function getRandomNumber(upperBound, seed)
      upperBound = CInt(upperBound)
      Randomize
      getRandomNumber = Cint(upperBound * Rnd(seed) + 1)
   End Function
]]>
</script>

请参阅

<event> 元素 | <property> 元素 | 说明事件 | 说明方法 | 说明属性


<object> 元素（Windows 脚本部件）

Windows 脚本部件

<object> 元素

定义可以由脚本引用的对象。

<object id="objID" [classid="clsid:GUID" | progid="progID"] events="true|false"/>

值

objID
在脚本中引用该对象时所用的名称。对象 ID 的值必须以字母开头，可以包括字母、数字以及下划线(_)。对象 ID 在该脚本部件范围内必须是唯一的。例如，如果指定名字为 CObj，则可以用这种方法在脚本中引用该对象：
x = CObj.Prop1
GUID
(可选项) 类 ID (GUID) 的引用，在该类下已有对象被注册。用法是 "clsid:"，后跟类 ID（不包括圆括号）。输入一个必须指定的 classid 或 progid 属性。例如：
classid="clsid:2154c700-9253-11d1-a3ac-0aa0044eb5f"
progID
(可选项) 该对象的程序 ID，可以指定为类 ID 的代替值。classid 或 progid 属性必须指定其中的一个。
events
（可选项） 一个允许将事件挂钩到对象的属性。默认情况下，events 为“假”。如果该属性为“真”，您可以连接到对象可引发的任意事件。必须为待处理的每个事件添加事件处理程序。

说明

<object> 元素提供了说明全局对象的方法，这样不必使用诸如 CreateObject() 之类的函数就可以在该脚本部件的脚本内使用这些对象。使用 <object> 元素将使该对象在全局范围内都可用，并允许脚本工具为对象的成员提供语句完善。

示例

下面的脚本部件片段包括一个 <object> 元素，该元素创建了一个 ADODB.Connection 对象的对象引用。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<registration progid="ADOScriptlet"/>
<object id="cnn" progid="ADODB.Connection"/>
<public>
   <property name="cnnState"/>
   <method name="openconnection"/>
</public>

<script language="VBScript">
<![CDATA[
Dim cnnState
Function openconnection()
   cnn.ConnectionString =
      "driver={SQL Server};server=myserver;uid=sa;database=pubs"
   cnn.Open
   If cnn.State = 1 Then
      cnnState = "open"
      cnn.Close
   Else
      cnnState = "closed"
   End If
End Function
]]>
</script>

请参阅

脚本部件文件的内容


<package> 元素（Windows 脚本部件）

Windows 脚本部件

<package> 元素

包含多个脚本部件的定义。

<package>
      此处为一个或多个脚本部件
</package>

说明

当一个 .wsc 文件只包含一个脚本部件定义时，<package> 元素是可选的。

示例

<package>
<component id="MyScriptlet">
   (此处为脚本部件信息)
</component>

<component id="MyOtherScriptlet">
   (此处为脚本部件信息)
</component>
</package>

请参阅

脚本部件文件的内容


<property> 元素

声明一个属性。

<property name="propertyName" [internalName="propertyVariable"] />

– 或者 –

<property name="propertyName">
   <get [internalName="getFunctionName"] />
   <put [internalName="putFunctionName"] />
</property>

值

propertyName
要说明的属性名称。除非指定了 internalName 属性，否则这个名称必须与将用来保存该属性值的全局变量的名称一致。
propertyVariable
(可选项) Scriptlet 文件<script> 元素中的全局变量的名称，该变量将用来保存 propertyName 的值。如果没有包括 internalName 属性，属性值将保存在与 propertyName 名称同名的变量中。如果指定 internalName 属性，则可以使用一个不同的名称来代表该属性及其相应的全局变量。
getFunctionName
(可选项) 用来读取属性值的过程名称。如果包括了 <get> 元素但没有包括 <put> 元素，该属性就是只读的。如果包括了 <get> 元素但没有指定 internalname 属性，那么用来读取属性值的方法的名称必须是该属性的名称加上 get_ 前缀（例如 get_lastname）。
putFunctionName
(可选项) 用来写入属性值的过程名称。如果包括了 <put> 元素但没有包括 <get> 元素，该属性就是只写的。如果包括了 <put> 元素但没有指定 internalname 属性，那么用来写入属性值的方法的名称必须是该属性的名称加上 put_ 前缀（例如， put_lastname）。
提示 在 XML，可以实现没有内容的元素 (如 <property> 元素)，方法是用 /> 来结束元素。

说明

属性可以作为简单值来说明。在这种情况下，属性将作为脚本部件文件内的全局变量来处理。

也可以将属性作为过程（函数或子程序）来实现，这样可以计算属性的值，以及控制属性是否为只读、只写或是可读写的。在这种技术中，属性将在单独的 <script> 元素内作为过程（函数或子程序）实现。<property>元素将属性名称映射到用来实现该属性的过程。过程的名称必须与在 <property> 元素中指定的内部名称一致。

当调用 putFunctionName 时，该函数将传递一个参数，其中包含了用来设置给该属性的值。

除了以上所示的标准语法，您可以使用速记符号指定由子标记（child tags）添加的信息。例如,如果您想声明一个具有和属性相同名字的"get" 和 "put" 访问者属性，您可以使用以下语法：

<property name="myproperty" get put/>

它在功能上相当于：

<property name="myproperty">
   <get/>
   <put/>
</property>

如果您想明确地不以默认名称命名这些访问者，您可以使用以下语法：

<property name="myproperty" get="testget" put="testput"/>

要指定缺省属性，只需在 <property> 元素中包含 dispid="0" 这个属性。详细信息请参阅说明属性。

示例

下面的脚本部件片段演示了四个属性 (sname、age、dateOfBirth 以及 mstatus) 的定义。sname 属性为一个简单值。age 属性是只读的，由 readAge 函数实现。dateOfBirth 属性是可读写的，由 readDOB 和 writeDOB 两个函数实现。最后， mstatus 属性由缺省函数 get_mstatus 以及 put_mstatus 实现。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <property name="sname"/>
   <property name="age">
      <get internalName="readAge"/>
   </property>
   <property name="dateOfBirth">
      <get internalName="readDOB"/>
      <put internalName="writeDOB"/>
   </property>
   <property name="mstatus">
      <get/>
      <put/>
   </property>
</public>

<script language="VBScript">
<![CDATA[
Dim sname   ' 可读写的 sname 属性（没有函数）。
Dim gDOB   ' 用来保存出生日期的全局变量。
Dim gMStatus   ' 用来保存材料状态的全局变量。

Function readDOB()
   ' Gets value of dateOfBirth property.
   readDOB = gDOB
End Function

Function writeDOB(newDOB)
   ' 设置 dateOfBirth 属性的值。
   If isDate(gDOB) Then
      ' 错误检查。
      gDOB = newDOB
   End If
End Function

Function readAge()
   '计算只读 age 的属性。
   If isDate(gDOB) Then
      dobM = DatePart("m", gDOB)
      dobD = DatePart("d", gDOB)
      dobY = DatePart("yyyy", gDOB)
      todayY = DatePart("yyyy", Date)
      age = todayY - dobY

      ' 如果今年还没有过生日，则进行调整。
      bday = DateValue(dobM & "/" & dobD & "/" & todayY)
      If DateDiff("d", bday, DateValue(Date)) < 0 Then
         age = age - 1
      End If
      readAge = age
   End If
End Function

Function get_mstatus()
   ' 读取 mstatus 属性的值。
   get_mstatus = gMStatus
End Function

Function put_mstatus(s)
   ' 写入 mstatus 属性的值。
   If s = "M" Or s = "S" Then
      gMStatus = s
   Else
      gMStatus = "?"
   End If
End Function
]]>
</script>

请参阅

<event> 元素 | <method> 元素 | 说明事件 | 说明方法 | 说明属性


<public> 元素

包含脚本部件的属性、方法和事件声明。

<public>
   <property name="pname"/>
   <method name="mname"/>
   <event name="ename"/>
</public>

请参阅

<event> 元素 | <method> 元素 | <property> 元素 | 说明事件 | 说明方法 | 说明属性


<reference> 元素（Windows 脚本部件）

Windows 脚本部件

<reference> 元素

包括一个外部类型库的引用。

<reference [object="progID" |guid="typelibGUID"] [version="version"]>

值

progID
用来派生类型库的程序 ID，可以包括一个版本号（例如 ADO.Recordset.2.0）。这个值可以包括类型库的显式程序 ID，或结合了类型库功能的可执行程序（如 .DLL）的程序 ID。如果使用了 object 属性，则不必指定 version 属性，因为版本属性可以从程序 ID 得到。

如果指定了 object 属性，则不能再指定 guid 属性。

typelibGUID
要引用的类型库的 GUID。如果指定了 guid 属性，则不能再指定 object 属性。
version
(可选项) 要使用的类型库的版本号。它的格式必须为 <主版本号>[.<次版本号>]。如果不指定版本号，则缺省版本为 1.0。如果使用了 object 属性来指定类型库，且没有指定版本号，则可以从指定的程序 ID 的注册键中得到版本信息。如果没有找到，缺省值为 1.0。

说明

在脚本部件中引用类型库使您可以在脚本中使用在该类型库中定义的常数。<reference> 元素查找并使指定程序 ID 或类型库名称所关联的类型库成为可用的。类型库信息可以在 .tlb、.olb 或 .dll 文件中获得。

<reference> 元素应出现在 <component> 元素内。如果在程序包中有多个脚本部件，该类型库只能应用于在 <component> 元素中声明了这个类型库的 脚本部件。

示例

在下面的脚本部件片段中，通过引用 ADO 的类型库（包含在 MSAD015.DLL 文件中），就可以在脚本中使用诸如 adStateOpen 这些 ADO 常数。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<reference object="ADODB.Connection.2.0"/>
<registration progid="ADOScriptlet"/>
<public>
   <property name="cnnstate"/>
   <method name="openConnection"/>
   <method name="closeConnection"/>
</public>

<script language="VBScript">
<![CDATA[
Dim cnn
Dim cnnState
Function openConnection()
   Set cnn = CreateObject("ADODB.Connection")
   cnn.ConnectionString =
      "driver={SQL Server};server=myserver;uid=sa;database=pubs"
   cnn.Open
   If cnn.State = adStateOpen Then
      cnnState = "open"
   Else
      cnnState = "closed"
   End If
End Function

Function closeConnection()
   cnn.Close
   cnnState = "closed"
End Function
]]>
</script>

请参阅

引用其他部件


<registration> 元素

定义用来将脚本部件注册为 COM 部件的信息。

<registration progid="progID" classid="GUID" description="description"
   version="version" [remotable=remoteFlag]/>

–或者–

<registration progid="progID" classid="GUID" description="description"
      version="version" [remotable=remoteFlag]>
   <script>
      (注册脚本或取消注册的脚本)
   </script>
</registration>

值

progID
(可选项) 程序员在创建脚本部件的实例时，用来引用脚本部件的文本名称。例如，如果脚本部件的程序 ID 为 Component.MyComponent，则可以使用类似下面的语句在 Microsoft® Visual Basic 中创建该脚本部件的一个实例：

Set Component = CreateObject("Component.MyComponent")

注意 尽管 progid 属性是可选的，但必须包括 progid 和 classid 属性两者之一（可以两个都包括）。如果只指定 progid 属性，将自动生成类 ID。如果只创建了类 ID，则不会注册 progid，且只能通过直接引用类 ID 来创建该对象。
GUID
(可选项) 使用类 ID 生成程序（如 Uuidgen.exe）生成的 GUID。如果没有包括类 ID，注册程序将给脚本部件指派一个类 ID。
description
(可选项) 脚本部件的文本描述，将存储在注册表中，有些工具（如 Visual Basic 对象浏览器）将使用这个信息。
version
(可选项) 指定的数字版本号码。在应用程序请求具体的版本名称时，将用一个句点把这个版本信息附加到程序 ID 后（例如， MyComponent.1)。只能使用数字（不允许十进制小数点）。
注意 <registration> 元素中的注册信息顺序可以任意。
remoteFlag
(可选项) 一个 Boolean 值，指明是否可以使用 DCOM 远程实例化脚本部件。详细信息请参阅“在应用程序中使用脚本部件”主题中的创建脚本部件的远程实例。

说明

在创建脚本部件之后，即可以使用 Regsvr32.exe 之类的程序来注册该脚本部件。这些程序读取 <registration> 元素中的信息，并将其写入计算机的 Windows 注册表。例如，可以用这种方式来注册一个脚本部件：

regsvr32 file:\\myserver\MyComponent.wsc
注意 并不是所有情况都必须要 <registration> 元素。例如，如果脚本部件实现的是 Microsoft® Internet Explorer 5.0 中的 DHTML Behavior 接口处理程序，则不需要注册，因为 Internet Explorer 将记录在页面上检测到的操作。关于注册要求的详细信息，请参阅所实现的接口处理程序的文档，并且还要注意在哪种主机上使用该脚本部件。

如果没有包括类 ID 信息，注册程序将在注册脚本部件时为其指定一个类 ID。不过，这样在每个注册地该脚本部件将获得一个不同的类 ID。建议您自己为脚本部件提供一个类 ID，确保在所有注册该脚本部件的计算机上具有相同的类 ID。

如果与该脚本部件一起使用的开发工具要存储类 ID，则让注册程序创建类 ID 会产生问题。如果注册过程每次创建一个新的类 ID，就会与该应用程序所存储的 ID 不一致。

当注册脚本部件或取消注册时可以运行脚本。要做到这一点，只需在 <registration> 元素内包括一个 <script> 元素。要在注册起见运行脚本，就编写一个 register( ) 函数。要在注消脚本部件后运行脚本，就包括一个 unregister( ) 函数。

示例

下面演示了一个典型的 <registration> 元素，其中同时包括了程序 ID 和类 ID。

<registration
   progid="Component.TestScript"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
   description="My Test Component"
   version="1"/>

下面的 registration 元素允许通过 DCOM 来实例化该脚本部件：

<registration>
   progid="Component.TestScript"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
   version="1"
   description="My Test Component"
   remotable=true/>

下面的示例演示了一个包括脚本的 <registration> 元素，在注册该脚本部件或取消注册时将执行这些脚本。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<registration
   progid="Component.TestScript"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}">
   version="1"
   description="My Test Component">

   <script language="VBScript">
      Function register()
         MsgBox "Component 'My Test Component' registered."
      End Function
      Function unregister()
         MsgBox "Component 'My Test Component' unregistered."
      End Function
   </script>
   ]]>
</registration>

请参阅

创建注册信息 | 注册脚本部件


<resource> 元素（Windows 脚本部件）

Windows 脚本部件

<resource> 元素

隔离不应硬编码到脚本部件脚本中的文本或数值数据。

<resource id="resourceID">
   此处为文本或数值
</resource>

值

resourceID
在脚本部件内代表该资源的唯一标识符。

说明

使用 <resource> 元素可以将脚本部件内的字符串或数值隔离开，但又可以在脚本部件的脚本中使用这些资源。例如，资源元素通常用来保存那些可能需要本地化为别的语言的字符串。

要获得某个资源的值，只需调用 getResource 函数，并将要使用的资源的 ID 传递给该函数。

示例

下面的脚本部件片段定义了一个资源（称为 errNonNumeric），并演示了在脚本中如何使用该资源。

注意 CDATA 项是必需的，将使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <method name="random" internalName="getRandomNumber"/>
</public>
<resource id="errNonNumeric">
   Non-numeric value passed
</resource>

<script language="VBScript">
<![CDATA[
Function getRandomNumber(upperBound)
   If IsNumeric(upperBound) Then
      getRandomNumber = Cint(upperBound * Rnd + 1)
   Else
      getRandomNumber=getResource("errNonNumeric")
   End If
End Function
]]>
</script>

请参阅

引用其他部件


<script> 元素（Windows 脚本部件）

Windows 脚本部件

<script> 元素

定义脚本部件的操作。

<script language="language">
   此处为脚本
</script>

值

language
脚本部件文件所使用的脚本语言的名称，诸如 Microsoft® Visual Basic® Scripting Edition (VBScript) 或 JScript。

说明

如果没有启用 XML 合法性检查，XML 语法分析程序将忽略位于 <script> 元素内的所有行。不过，如果在脚本部件文件的开始处包括了 <?XML ?> 声明，即启用了 XML 合法性检查，则 XML 语法分析程序可能会把脚本中使用的大于号 (<) 、小于号 (>)、与符号 (&) 以及其他字符误当作 XML 分隔符。

如果创建了一个严格遵守 XML 的文件，您必须确保脚本元素中的这些字符不会作为 XML 的保留字符来进行处理。要做到这一点，可以将实际的脚本用 <![CDATA[ ... ]]> 项包起来。关于 XML 有效性的问题，请参阅脚本部件文件和 XML 一致性。

注意 请不要包括 CDATA 项，除非还包含了 <?XML ?> 声明。

示例

<?XML version="1.0"?>
<component id="ScriptletFactorial">
<registration progid="Component.Factorial"/>
<public>
   <method name="factorial"/>
</public>

<script language="VBScript">
<![CDATA[
Function factorial(n)
   If isNumeric(n) Then
      If n <= 1 Then
         factorial = 1
      Else
         factorial = n * factorial(n-1)
      End If
   Else
      factorial = -2   ' Error code.
   End If
End Function
]]>
</script>
</component>

请参阅

脚本部件文件的内容


<component> 元素

包含一个完整的 Windows 脚本部件定义。

<component id=componentid>
   此处为脚本部件信息
</component>

值

componentid
唯一标识该脚本部件的字符串。如果文档包含多个脚本部件或者为多个脚本部件创建一个类型库时，这个值是很有用的。标识符必须以字母开头，并且不能包括空格。在脚本部件程序包内该标识符必须是唯一的。

如果指定了这个标识符，则在主机应用程序内这个值将作为该脚本部件的类名称。例如，如果在 <component> 元素内将脚本部件 ID 指定为 “MyComponent”，则在 Visual Basic 对象浏览器内该脚本部件就标识为 MyComponent 类。如果没有指定脚本部件 ID，缺省值为 ComponentCoClass。

说明

在脚本部件文件内，完整的脚本部件定义 — 包括 <registration>、<public> 以及 <implements> 元素 — 必须位于 <component> 元素内。如果该文件包含多个脚本部件，它们必须包含在一个 <package> 元素内。

示例

下面演示了一个简单而完整的脚本部件，其中包括一个 factorial 方法和一个 name 属性。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<?XML version="1.0"?>
<component>
<registration>
   description="My Test Component"
   progid="Component.TestScript"
   version="1"
   classid="{2154c700-9253-11d1-a3ac-0aa0044eb5f}"
</registration>

<public>
   <property name="name"/>
   <method name="factorial"/>
</public>

<script language="VBScript">
   <![CDATA[
   Function factorial(n)
      If isNumeric(n) Then
         If n <= 1 Then
            factorial = 1
         Else
            factorial = n*factorial(n-1)
         End If
      Else
         factorial = -2   '错误代码。
      End If
   End Function
   ]]>
</script>
</component>

请参阅

脚本部件文件的内容


Behavior 处理程序参考

使用 Behavior 处理程序，Microsoft® Internet Explorer 为 Behavior 脚本部件提供了通过自定义事件及其包含页面进行通信的手段，并且提供了访问包含文档的对象模型的手段。

下述元素、属性和方法是 Behavior 处理程序特有的。

  • <attach> 元素
  • <layout> 元素
  • element 属性
  • attachNotification 方法
  • createEventObject 方法
  • fireEvent 方法


<attach> 元素

将包含文档的事件绑定到脚本部件中的函数。

<attach event="eventName" handler="functionName" [for="elementName"]/>

值

eventName
待绑定的事件，如 onmouseclick。
functionName
为响应该事件而执行的脚本部件文件的过程（函数或子例程）名称。如果省略该属性，则将生成一个。

如果没有指定 for 属性，则处理程序属性的缺省值为事件属性的值。如果指定了 for 属性，则缺省的处理程序属性为 for 属性值、“_” 以及事件的属性值三者连接而成的字符串。

elementName
该元素与事件关联在一起，用来包含没有显式绑定 DHTML Behavior 的元素。for 属性的可能取值有 “document”、“window”以及 “element”。如果没有包括 for 属性，则缺省为 “element”，且认为是在绑定该操作的元素上激活该事件。

示例

在下述示例中，<attach> 元素将三个事件绑定到函数。例如，DHTML 的onmouseover 元素被绑定到脚本部件的 do_onmouseover 函数。绑定给 DHTML 的 onmouseover 和 onmouseout 事件的函数只有在包含文档中绑定了该操作的元素上激活这些事件时才被执行。docinit 函数则显式绑定到 DHTML 文档对象的 onload 事件。

注意 CDATA 项是必需的，它使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<?XML version="1.0"?>
<component id="bvrscript component1">
<registration progID="Behaviorscript component"/>
<implements type="Behavior">
   <attach event="onmouseover" handler="do_onmouseover"/>
   <attach event="onmouseout "handler="do_onmouseout"/>
   <attach for="window" event="onload" handler="docinit"/>
</implements>
<script language="JScript">
<![CDATA[
var normalColor, normalSpacing;
function do_onmouseover(){
   // 保存原始值。
   normalColor = style.color;
   normalSpacing= style.letterSpacing;
   style.color = "red";
   style.letterSpacing = 2;
}
function do_onmouseout(){
   // 恢复原始值。
   style.color = normalColor;
   style.letterSpacing = normalSpacing;
}
function docinit(){
   document.linkColor = "red";
}
]]>
</script>
</component>

请参阅

创建 Behavior 脚本部件


attachNotification 方法

将脚本部件中的函数绑定到由主机发送的通知消息。

behavior.attachNotification (fpNotify)

值

behavior
用来实现 Behavior 接口的 <implements> 元素 ID。
注意 在缺省情况下， 由 Behavior 处理程序说明的属性和方法是自动添加到全局的脚本命名空间，并不必引用 Behavior 处理程序 ID 就可以访问这些属性和方法。在这种情况下，不必象语法中所示的那样使用 Behavior.attachNotification，只需简单地用 attachNotification 就可以在脚本中使用该属性。详细信息请参阅<implements> 元素。
fpNotify
要绑定到通知的函数名称。

说明

目前主机可以使用下述通知来调用指定的函数：

  • “contentReady” 元素的内容被更改，而该元素已绑定到该操作。只要分析完该元素两端的标记后，就会激活该通知，就象在脚本中设置了该元素的 DHTML innerHTML 属性一样。一个操作可以使用这个通知来检索应用该操作的元素内容。
  • “documentReady” 浏览器已完成对文档的语法分析。此时可以发生对内容需要发出的任何通知或初始化。
    注意 attachNotification 方法不会通知在文档、窗口或页面中任何元素内发生的脚本部件的标准事件。接受这种类型的通知的可取方法是使用 DHTML achEvent 方法。

在处理元素的 DHTML 样式属性的更改（诸如设置其可见性、更改颜色或更改字体）时，建议将这些更改内嵌在脚本部件的 <script> 元素内，如下面的脚本部件片段所示。在 documentReady 通知内进行这种更改将导致轻微闪烁。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<implements type="Behavior"/>
<script language="JScript">
<![CDATA[
   style.color = "green";
   style.letterSpacing = 5;
]]>
</script>

示例

下面的示例演示了如何设置一个函数来捕获通知并进行适当的处理。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<?XML version="1.0"?>
<component>
<implements type="Behavior">
   <event name="onResultChange"/>
</implements>

<script language="JScript">
<![CDATA[
   attachNotification (onNotification);
   function onNotification (sNotification){
      if (sNotification == "contentReady"){
         // 元素的内容已被更改。
      }
      else if (sNotification == "documentReady"){
         // 主机已完成对元素的分析。
      }
      window.status = sNotification;
   }
]]>
</script>
</component>

请参阅

<event> 元素


createEventObject 方法

创建一个 DHTML 事件对象，在调用 fireEvent 方法时，将用该对象将事件的上下文信息传递给包含文档。

oEvent = behavior.createEventObject()

值

behavior
用来实现 Behavior 接口的 <implements> 元素的 ID。
注意 在缺省情况下， createEventObject 方法具有全局范围，且不必引用 Behavior 处理程序 ID 就可以访问该方法。例如，不必按语法所示的那样使用 Behavior.createEventObject，只需按调用 createEventObject 函数一样来调用该函数。详细信息请参阅 <implements> 元素。
oEvent
该方法创建的事件对象。

说明

同一个事件对象不能被多个 fireEvent 调用。

示例

下面的脚本部件片段是从假定的 calculator 脚本部件中摘出来的。只要结果被更改，该脚本部件就会给页面激活自定义的 onResultChange 事件，并作为该事件对象的 expando 属性传递该结果。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<component>
<implements type="Behavior">
   <event name="onResultChange"/>
</implements>

<script language="JScript">
<![CDATA[
attachEvent("onclick", doCalc);

function doCalc()
{
   // 此处为用于计算的编码。
   // 结果写入 sResult 变量。
   oEvent = createEventObject();
   oEvent.result = sResult;
   fireEvent("onResultChange",oEvent);
}
]]>
</script>
</component>

下面演示了包含了 DHTML 的页面的样式。在 onResultChange 事件被激活时，就从 DHTML window.event 对象的 expando result 属性提取出计算结果，并在 resultWindow <DIV> 元素中显示该结果。

<HTML>
<HEAD>
<xml:namespace prefix="LK" />
<style>
   LK\:CALC {behavior:url(engine.wsc)}
</style>
<script language="JScript">
function showResults(){
   resultWindow.innerText=window.event.result;
}
</script>
</HEAD>

<LK:CALC id="myCalc" onResultChange="showResults()">
<TABLE>
<TR>
   <DIV ID=resultWindow
      STYLE="border: '.025cm solid gray'"
         ALIGN=RIGHT>0.</DIV>
</TR>
<TR>
   <TD><INPUT TYPE=BUTTON VALUE=" 0 "></TD>
   <TD><INPUT TYPE=BUTTON VALUE="+/-"></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" . "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" + "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" = "></TD>
<TR>
</TABLE>
</LK:CALC>
</HTML>

请参阅

在 Behavior 脚本部件中说明自定义事件


element 属性

返回要应用该操作的元素。

 [oElement = ] Behavior.element

值

oElement
要应用该操作的元素。
Behavior
用来实现 Behavior 接口的 <implements> 元素的 ID。
注意 在缺省情况下，由 Behavior 处理程序说明的属性和方法是自动添加到全局的脚本命名空间，并不必引用 Behavior 处理程序 ID 就可以访问这些属性和方法。在这种情况下，不必象语法中所示的那样使用 Behavior.element，只需简单地用 element 就可以在脚本中使用该属性。详细信息请参阅<implements> 元素。

说明

该属性是只读的。

使用这个属性，操作就可以与包含文档进行通信。DHTML 对象模型所说明的所有属性、方法和事件都可以通过这个属性来加以访问。

示例

下面的脚本部件片段使用脚本部件实现了一个可以展开折叠的目录表。该脚本部件绑定到该元素的 DHTML onmouseover 事件。它将该元素的 DHTML cursor 属性设置为 “握手” 信号，来告诉用户可以单击该元素翻转其子元素的可见性。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<public>
   <attach event="onmouseover" handler="event_onmouseover");
</public>

<implements type="Behavior"/>
<script language="JScript">
<![CDATA[
   function event_onmouseover()
   {
      oElement = window.event.srcElement;
      if (oElement == element)
         oElement.style.cursor = "hand";
   }
]]>
</script>

请参阅

有关将操作应用于 DHTML 元素的一般信息，请参阅 Microsoft Web 站点的 Site Builder Network (SBN) Workshop 上的“使用 DHTML Behaviors”主题。


<layout> 元素

定义要插入到包含文档中的 HTML 文本。

<layout>
   <HTMLtag>Inserted text</HTMLtag>
</layout>

值

HTMLTag
要替换元素文本的 HTML 标记的名称。

说明

在调用该操作时，<layout> 元素内的文本被读入到包含文档中的相应元素。该操作等价于设置元素的 DHTML innerHTML 属性。

如果该脚本部件没有定义为遵守 XML 语言，则 <layout> 元素的内容是不透明的。不过，如果脚本部件遵守 XML 语言，则 <layout> 元素的内容必须显式设定为不透明的，方法是将这些内容包括在 CDATA 内。详细信息请参阅脚本部件文件和 XML 一致性。

示例

下面演示了一个具有 <layout> 元素的脚本部件示例。由于该脚本部件在开始处包含有 <?XML ?> 声明，因此 <layout>元素包含了一个 CDATA 项，使 <layout> 元素的内容对 XML 分析程序是不透明的。

<?XML version="1.0" ?>
<component id="bvrScriptlet1">
<registration progID="BehaviorScriptlet"/>
<implements type="Behavior">
   <layout>
   <![CDATA[
      <h1>This is the HTML to show in the element</h1>
   ]]>
   </layout>
</implements>
</component>

请参阅

有关将操作应用于 DHTML 元素的一般信息，请参阅 Microsoft Web 站点的 Site Builder Network (SBN) Workshop 上的“使用 DHTML Behaviors”主题。


fireEvent 方法（Windows 脚本部件 Behavior）

Windows 脚本部件

fireEvent 方法

激活一个自定义事件。

Behavior.fireEvent(sEvent[, oEvent])

值

Behavior
用来实现 Behavior 接口的 <implements> 元素的 ID。
注意 在缺省情况下， 由 Behavior 处理程序说明的属性和方法是自动添加到全局的脚本命名空间，并不必引用 Behavior 处理程序 ID 就可以访问这些属性和方法。在这种情况下，不必象语法中所示的那样使用 Behavior.fireEvent，只需简单地用 fireEvent 就可以在脚本中使用该属性。详细信息请参阅<implements> 元素。
sEvent
在 <implements> 元素内声明的自定义事件的名称。
oEvent
(可选项) 指定一个包含上下文信息的事件对象。该事件对象是使用 createEventObject 方法创建的。

说明

同一个事件对象不能重复用于多个对 fireEvent 方法的调用。

示例

下面的脚本部件片段是从假定的 calculator 脚本部件中摘出来的。只要结果被更改，该脚本部件就会给页面激活自定义的 onResultChange 事件，并作为该事件对象的 expando 属性传递该结果。

注意 CDATA 项是必需的，以使 <script> 元素中的脚本成为不透明的。详细信息请参阅脚本部件文件和 XML 一致性。
<component>
<public>
   <event name="onResultChange" />
</public>

<implements type="Behavior">
   <attach event="onclick" handler="doCalc");
</implements>

<script language="JScript">
<![CDATA[
function doCalc(){
   // 此处为进行计算的代码。
   // 结果写入 sResult 变量。

   oEvent = createObjectEvent();
   oEvent.result = sResult;
   fireEvent("onResultChange",oEvent);
}
]]>
</script>
</component>

下面演示了包含了 DHTML 的页面的样式。在 onResultChange 事件被激活时，就从 window.event 对象的 expando result 属性提取出计算结果，并在 resultWindow <DIV> 元素中显示该结果。

<HTML>
<HEAD>
<xml:namespace prefix="LK" />
<style>
   LK\:CALC {behavior:url(engine.wsc)}
</style>
<script language="JScript">
function showResults(){
   resultWindow.innerText=window.event.result;
}
</script>
</HEAD>

<LK:CALC id="myCalc" onResultChange="showResults()">
<TABLE>
<TR>
   <DIV ID=resultWindow
      STYLE="border: '.025cm solid gray'"
      ALIGN=RIGHT>0.</DIV>
</TR>
<TR>
   <TD><INPUT TYPE=BUTTON VALUE=" 0 "></TD>
   <TD><INPUT TYPE=BUTTON VALUE="+/-"></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" . "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" + "></TD>
   <TD><INPUT TYPE=BUTTON VALUE=" = "></TD>
<TR>
</TABLE>
</LK:CALC>
</HTML>

请参阅

在 Behavior 脚本部件中说明自定义事件 | fireEvent


Microsoft Windows Script Interfaces-Introduction

Microsoft® Windows® Script Interfaces
Microsoft Windows Script Interfaces-Introduction 		Language Reference
Next

Microsoft® Windows® Script Interfaces introduce a new way for an application to add scripting and OLE Automation capabilities. With the advent of the interfaces, hosts can call upon disparate scripting engines from multiple sources and vendors to perform scripting between components. The implementation of the script itself—language, syntax, persistent format, execution model, and so on—is left to the script vendor. The designers have taken care to allow hosts that rely on Windows Script to use arbitrary language back ends.

  • Windows Script Hosts
  • Windows Script Engines
  • IDispatchEx
  • IProvideMultipleClassInfo
  • Active Script Debugging Interfaces
Windows Script Terms

This list contains definitions of the scripting-related terms used in this document.

Term | Definition
Code object | An instance created by the scripting engine that is associated with a named item, such as the module behind a form in Visual Basic®, or a C++ class associated with a named item. Preferably, this is an OLE Component Object Model (COM) object that supports OLE Automation so the host or other nonscript entity can manipulate the code object.
Named item | An OLE COM object (preferably one that supports OLE Automation) that the host deems interesting to the script. Examples include the HTML Page and Browser in a Web browser, and the Document and Dialogs in Microsoft Word.
Script | The data that makes up the program that the scripting engine runs. A script can be any contiguous executable data, including pieces of text, blocks of pcode, or even machine-specific executable byte codes. A host loads a script into the scripting engine through one of the IPersist* interfaces or through the IActiveScriptParse interface.
Scripting engine | The OLE object that processes scripts. A scripting engine implements the IActiveScript and, optionally, IActiveScriptParse interfaces.
Scripting host | The application or program that owns the Windows Script engine. The host implements the IActiveScriptSite and, optionally, IActiveScriptSiteWindow interfaces.
Scriptlet | A portion of a script that gets attached to an object through the IActiveScriptParse interface. The aggregate collection of scriptlets is the script.
Script language | The language in which a script is written (VBScript, for example) and the semantics of that language.

Windows Script Background

Windows Script components fall into two categories: Windows Script hosts and Windows Script engines. A host creates a scripting engine and calls on the engine to run the scripts. Examples of Windows Script hosts include:

  • Microsoft Internet Explorer
  • Internet authoring tools
  • Shell

Windows Script engines can be developed for any language or run-time environment, including:

  • Microsoft Visual Basic Scripting Edition (VBScript)
  • Perl
  • Lisp

To make implementation of the host as flexible as possible, an OLE Automation wrapper for Windows Script is provided. However, a host that uses this wrapper object to instantiate the scripting engine does not have the degree of control over the run-time name space, the persistence model, and so on, that it would if it used Windows Script directly.

The Windows Script design isolates the interface elements required only in an authoring environment so that nonauthoring hosts (such as browsers and viewers) and script engines (for example, VBScript) can be kept lightweight.

Windows Script Basic Architecture

The following illustration shows the interaction between an Windows Script host and an Windows Script engine.

Following is a description of the steps involved in the interaction between the host and engine. The actual nesting of the function calls is omitted for clarity.

  1. Create a Project. The host loads a project or document. (This step is not particular to Windows Script, but is included here for completeness.)
  2. Create the Windows Script Engine. The host calls CoCreateInstance to create a new Windows Script engine, specifying the class identifier (CLSID) of the specific scripting engine to use. For example, the HTML browsing component of Internet Explorer receives the scripting engine's class identifier through the CLSID= attribute of the HTML <OBJECT> tag.
  3. Load the Script. If the script contents have been persisted, the host calls the script engine's IPersist*::Load method to feed it the script storage, stream, or property bag. Otherwise, the host uses either the IPersist*::InitNew or IActiveScriptParse::InitNew method to create a null script. A host that maintains a script as text can use IActiveScriptParse::ParseScriptText to feed the scripting engine the text of the script, after calling IActiveScriptParse::InitNew.
  4. Add Named Items. For each top-level named item (such as pages and forms) imported into the scripting engine's name space, the host calls the IActiveScript::AddNamedItem method to create an entry in the engine's name space. This step is not necessary if top-level named items are already part of the persistent state of the script loaded in step 3. A host does not use IActiveScript::AddNamedItem to add sublevel named items (such as controls on an HTML page); rather, the engine indirectly obtains sublevel items from top-level items by using the host's ITypeInfo and IDispatch interfaces.
  5. Run the Script. The host causes the engine to start running the script by setting the SCRIPTSTATE_CONNECTED flag in the IActiveScript::SetScriptState method. This call would likely perform any scripting engine construction work, including static binding, hooking up to events (see below), and executing code, in a way similar to a scripted main() function.
  6. Get Item Information. Each time the script engine needs to associate a symbol with a top-level item, it calls the IActiveScriptSite::GetItemInfo method, which returns information about the given item.
  7. Hook Up Event Advise. Before starting the actual script, the scripting engine connects to the events of all the relevant objects through the IConnectionPoint interface.
  8. Invoke Properties and Methods. As the script runs, the scripting engine realizes references to methods and properties on named objects through IDispatch::Invoke or other standard OLE binding mechanisms.


Windows Script Hosts

Microsoft® Windows® Script Interfaces
Windows Script Hosts 		Language Reference
Previous
Next

When implementing Microsoft® Windows® Script host, you can safely assume that a scripting engine will only call the IActiveScriptSite interface in the context of the base thread as long as the host does the following:

  • Chooses a base thread (generally the thread that contains the message loop).
  • Instantiates the scripting engine in the base thread.
  • Calls scripting engine methods only from the base thread, except where specifically allowed, as in the cases of IActiveScript::InterruptScriptThread and IActiveScript::Clone.
  • Calls the scripting engine's dispatch object only from the base thread.
  • Ensures that the message loop runs in the base thread if a window handle is provided.
  • Ensures that objects in the host's object model only source events in the base thread.

These rules are automatically followed by all single-threaded hosts. The restricted model described above is intentionally loose enough to allow a host to abort a stuck script by calling IActiveScript::InterruptScriptThread from another thread (initiated by a CTRL+BREAK handler or the like), or to duplicate a script in a new thread using IActiveScript::Clone.

Also, none of these restrictions apply to a host that chooses to implement a free-threaded IActiveScriptSite interface and a free-threaded object model. Such a host can use the IActiveScript interface from any thread, without restriction.


Windows Script Engines

Microsoft® Windows® Script Interfaces
Windows Script Engines 		Language Reference
Previous
Next

To implement an Microsoft® Windows® Script engine, create an OLE COM object that supports the following interfaces.

Interface | Description
IActiveScript | Provides the basic scripting ability. Implementation of this interface is required.
IActiveScriptParse | Provides the ability to add script text, evaluate expressions, and so on. Implementation of this interface is optional; however, if it is not implemented, the script engine must implement one of the IPersist* interfaces in order to load a script.
IPersist* Provides persistence support. Implementation of at least one of the following interfaces is required if IActiveScriptParse is not implemented.
Interface | Description
IPersistStorage | Provides support for the DATA={url} attribute in the OBJECT tag.
IPersistStreamInit | Provides support for the same as IPersistStorage as well as the DATA="string-encoded byte stream" attribute in the OBJECT tag.
IPersistPropertyBag | Provides support for the PARAM= attribute in the OBJECT tag.

Note: It is possible that the scripting engine will never be called upon to save or restore a script state through IPersist*. Instead, IActiveScriptParse is used by calling IActiveScriptParse::InitNew to create a blank script, then scriptlets are added and connected to events with IActiveScriptParse::AddScriptlet and general code is added with IActiveScriptParse::ParseScriptText. Nonetheless, a scripting engine should fully implement at least one IPersist* interface (preferably IPersistStreamInit), because other host applications may try to make use of them.

The following sections describe implementing a Windows Scripting engine in more detail.

  • Registry Standard
  • Script Engine States
  • Scripting Engine Threading

See the Script Interface Reference for more information.

Registry Standard

An Windows Script engine can identify itself using component categories. Windows Script currently defines two component categories.

Category | Decription
CATID_ActiveScript | Indicates that the class identifiers (CLSIDs) are Windows Script engines that support, at a minimum, the IActiveScript interface and a persistence mechanism (the IPersistStorage, IPersistStreamInit, or IPersistPropertyBag interface).
CATID_ActiveScriptParse | Indicates that the CLSIDs are Windows Script engines that support, at a minimum, the IActiveScript and IActiveScriptParse interfaces.

Although IActiveScriptParse is not a true persistence mechanism, it does support the IActiveScriptParse::InitNew method that is functionally equivalent to IPersist*::InitNew.

Script Engine States

At any given time, an Windows Script engine can be in one of several states.

State | Descriptioon
uninitialized | The script has not been initialized or loaded using an IPersist* interface, or does not have an IActiveScriptSite interface set. The scripting engine is generally not usable from this state until the script is loaded.
initialized The script has been initialized with an IPersist* interface and has an IActiveScriptSite interface set, but is not connected to host objects and sinking events. Note that this state simply means that the IPersist*::Load, IPersist*::InitNew, or IActiveScriptParse::InitNew method has been completed, and that the IActiveScript::SetScriptSite method has been called. The engine cannot run code in this mode. The engine queues code that the host passes to it through the IActiveScriptParse::ParseScriptText method, and executes the code after transitioning to the started state.

Because languages can vary widely in semantics, scripting engines are not required to support this state transition. Engines that support the IActiveScript::Clone method must, however, support this state transition. Hosts must prepare for this transition and take the appropriate action: release the current scripting engine, create a new scripting engine, and call IPersist*::Load, IPersist*::InitNew, or IActiveScriptParse::InitNew (and possibly also call IActiveScriptParse::ParseScriptText). Use of this transition should be considered an optimization of the above steps. Note that any information the scripting engine has obtained about the names of Named Items and the type information describing Named Items remains valid.

Because languages vary widely, defining the exact semantics of this transition is difficult. At a minimum, the scripting engine must disconnect from all events, and release all of the SCRIPTINFO_IUNKNOWN pointers obtained by calling the IActiveScriptSite::GetItemInfo method. The engine must re-obtain these pointers after the script is run again. The scripting engine should also reset the script back to an initial state that is appropriate for the language. VBScript, for example, resets all variables and retains any code added dynamically by calling IActiveScriptParse::ParseScriptText with the SCRIPTTEXT_ISPERSISTENT flag set. Other languages may need to retain current values (such as Lisp because there is no code/data separation) or reset to a well-known state (this includes languages with statically initialized variables).

Note that the transition to the started state should have the same semantics (that is, it should leave the scripting engine in the same state) as calling IPersist*::Save to save the scripting engine, and then calling IPersist*::Load to load a new scripting engine; these actions should have the same semantics as IActiveScript::Clone. Scripting engines that do not yet support IActiveScript::Clone or IPersist* should carefully consider how the transition to the started state should behave, so that such a transition would not violate the above conditions if IActiveScript::Clone or IPersist* support was later added.

During this transition to the started state, the scripting engine will disconnect from event sinks after the appropriate destructors, and so on, are executed in the script. To avoid having these destructors executed, the host can first move the script into the disconnected state before moving into the started state.

Use IActiveScript::InterruptScriptThread to cancel a running script thread without waiting for current events, and so on, to finish running.

started | The transition from the initialized state to the started state causes the engine to execute any code that was queued in the initialized state. The engine can execute code while in the started state, but it is not connected to any events added through the IActiveScript::AddNamedItem method. The engine can execute code by calling the IDispatch interface obtained from the IActiveScript::GetScriptDispatch method, or by calling IActiveScriptParse::ParseScriptText. It is possible that further background initialization (progressive loading) is still ongoing, and that calling the IActiveScript::SetScriptState method with the SCRIPTSTATE_CONNECTED flag set may cause the script to block until initialization is complete.
connected | The script is loaded and connected for sinking events from host objects. If this is a transition from the initialized state, the scripting engine should transition through the started state, performing the necessary actions, before entering the connected state and connecting to events.
disconnected | The script is loaded and has a run-time state, but is temporarily disconnected from sinking events from host objects. This can be done either logically (ignoring events received) or physically (calling IConnectionPoint::Unadvise on the appropriate connection points). If this is a transition from the initialized state, the scripting engine should transition through the started state, performing the necessary actions, before entering the disconnected state. Event sinks that are in progress are completed before the state changes (use IActiveScript::InterruptScriptThread to cancel a running script thread). This state is distinguished from the initialized state in that the transition to this state does not cause the script to reset, the run-time state of the script is not reset, and a script initialization procedure is not executed.
closed | The script has been closed. The scripting engine no longer works and returns errors for most methods.

The following illustration shows the relationships between the various scripting engine states, and shows the methods that cause transitions from one state to another.

The following illustration shows the actions that the scripting engine performs during the various state transitions.

Scripting Engine Threading

Because an Windows Script engine can be used in many environments, it is important to keep its execution model as flexible as possible. For example, a server-based host may need to preserve a multithreaded design while using Windows Script in an efficient manner. At the same time, a host that does not use threading, such as a typical application, should not be burdened with threading management. Windows Script achieves this balance by restricting the ways a free-threaded scripting engine can call back to the host, freeing hosts from this burden.

Scripting engines used on servers are typically implemented as free-threading COM objects. This means that methods on the IActiveScript interface and its associated interfaces can be called from any thread in the process, without marshaling. (Unfortunately, this also means that the scripting engine must be implemented as an in-process server, because OLE does not currently support interprocess marshaling of free-threaded objects.) Synchronization is the responsibility of the scripting engine. For scripting engines that are not internally reentrant, or for language models that are not multithreaded, synchronization could be as simple as serializing access to the scripting engine with a mutex. Of course certain methods, such as IActiveScript::InterruptScriptThread, should not be serialized in this way so that a stuck script can be terminated from another thread.

The fact that IActiveScript is typically free-threaded generally implies that the IActiveScriptSite interface and the host's object model should be free-threaded as well. This would make implementation of the host quite difficult, particularly in the common case where the host is a single-threaded Microsoft Windows®-based application with single-threaded or apartment-model ActiveX Controls in its object model. For this reason, the following constraints are placed on the scripting engine's use of IActiveScriptSite:

  • The script site is always called in the context of a host thread. That is, the scripting engine never calls the script site in the context of a thread that the scripting engine created, but only from within a scripting engine method that was called from the host through IActiveScript and its derivatives, through the exposed scripting engine's dispatch object, through a Windows message, or from an event source in the host's object model.
  • The script site is never called from within the context of a simple thread state control method (for example, the IActiveScript::InterruptScriptThread method) or from the IActiveScript::Clone method.


Windows Script Interface Reference

Microsoft® Windows® Script Interfaces
Windows Script Interface Reference 		Language Reference
Previous
Next

The following interfaces are specific to Microsoft® Windows® Script hosts:

  • IActiveScriptSite
  • IActiveScriptSiteWindow

The following interfaces are specific to Windows Script Engines.

  • IActiveScript
  • IActiveScriptError
  • IActiveScriptParse

The following enumerations are specific to Windows Script Engines.

  • SCRIPTSTATE
  • SCRIPTTHREADSTATE


IActiveScript

Microsoft® Windows® Script Interfaces
IActiveScript 		Language Reference
Previous
Next

The IActiveScript interface provides the methods necessary to initialize the scripting engine. The scripting engine must implement the IActiveScript interface.

Methods in Vtable Order

Method | Description
SetScriptSite | Informs the scripting engine of the IActiveScriptSite site provided by the host.
GetScriptSite | Retrieves the site object associated with the Windows Script engine.
SetScriptState | Places the scripting engine into the specified state.
GetScriptState | Retrieves the current state of the scripting engine.
Close | Causes the scripting engine to abandon any currently loaded script, lose its state, and release any interface pointers it has to other objects, thus entering a closed state.
AddNamedItem | Adds the name of a root-level item to the scripting engine's name space.
AddTypeLib | Adds a type library to the name space for the script.
GetScriptDispatch | Retrieves the IDispatch interface for the running script.
GetCurrentScriptThreadID | Retrieves a scripting-engine-defined identifier for the currently executing thread.
GetScriptThreadID | Retrieves a scripting-engine-defined identifier for the thread associated with the given Microsoft Win32® thread.
GetScriptThreadState | Retrieves the current state of a script thread.
InterruptScriptThread | Interrupts the execution of a running script thread.
Clone | Clones the current scripting engine (minus any current execution state), returning a loaded scripting engine that has no site in the current thread.


IActiveScript::AddNamedItem

Microsoft® Windows® Script Interfaces
IActiveScript::AddNamedItem 		Language Reference
Previous
Next

HRESULT AddNamedItem(
    LPCOLESTR pstrName,  // address of item name
    DWORD dwFlags        // item flags
);

Adds the name of a root-level item to the scripting engine's name space. A root-level item is an object with properties and methods, an event source, or all three.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).

pstrName
[in] Address of a buffer that contains the name of the item as viewed from the script. The name must be unique and persistable.
dwFlags
[in] Flags associated with an item. Can be a combination of these values:

Value | Meaning
SCRIPTITEM_CODEONLY | Indicates that the named item represents a code-only object, and that the host has no IUnknown to be associated with this code-only object. The host only has a name for this object. In object-oriented languages such as C++, this flag would create a class. Not all languages support this flag.
SCRIPTITEM_GLOBALMEMBERS | Indicates that the item is a collection of global properties and methods associated with the script. Normally, a scripting engine would ignore the object name (other than for the purpose of using it as a cookie for the IActiveScriptSite::GetItemInfo method, or for resolving explicit scoping) and expose its members as global variables and methods. This allows the host to extend the library (run-time functions and so on) available to the script. It is left to the scripting engine to deal with name conflicts (for example, when two SCRIPTITEM_GLOBALMEMBERS items have methods of the same name), although an error should not be returned because of this situation.
SCRIPTITEM_ISPERSISTENT | Indicates that the item should be saved if the scripting engine is saved. Similarly, setting this flag indicates that a transition back to the initialized state should retain the item's name and type information (the scripting engine must, however, release all pointers to interfaces on the actual object).
SCRIPTITEM_ISSOURCE | Indicates that the item sources events that the script can sink. Child objects (properties of the object that are in themselves objects) can also source events to the script. This is not recursive, but it provides a convenient mechanism for the common case, for example, of creating a container and all of its member controls.
SCRIPTITEM_ISVISIBLE | Indicates that the item's name is available in the name space of the script, allowing access to the properties, methods, and events of the item. By convention the properties of the item include the item's children; therefore, all child object properties and methods (and their children, recursively) will be accessible.
SCRIPTITEM_NOCODE | Indicates that the item is simply a name being added to the script's name space, and should not be treated as an item for which code should be associated. For example, without this flag being set, VBScript will create a separate module for the named item, and C++ might create a separate wrapper class for the named item.


IActiveScript::AddTypeLib

Microsoft® Windows® Script Interfaces
IActiveScript::AddTypeLib 		Language Reference
Previous
Next

HRESULT AddTypeLib(
    REFGUID guidTypeLib,  // CLSID of type library
    DWORD dwMaj,          // major version number
    DWORD dwMin,          // minor version number
    DWORD dwFlags         // option flags
);

Adds a type library to the name space for the script. This is similar to the #include directive in C/C++. It allows a set of predefined items such as class definitions, typedefs, and named constants to be added to the run-time environment available to the script.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).
    TYPE_E_CANTLOADLIBRARY | The specified type library could not be loaded.

guidTypeLib
[in] CLSID of the type library to add.
dwMaj
[in] Major version number.
dwMin
[in] Minor version number.
dwFlags
[in] Option flags. Can be the following:

Value | Meaning
SCRIPTTYPELIB_ISCONTROL | The type library describes an ActiveX control used by the host.


IActiveScript::Clone

Microsoft® Windows® Script Interfaces
IActiveScript::Clone 		Language Reference
Previous
Next

HRESULT Clone(
    IActiveScript **ppscript  // receives pointer to IActiveScript
);

Clones the current scripting engine (minus any current execution state), returning a loaded scripting engine that has no site in the current thread. The properties of this new scripting engine will be identical to the properties the original scripting engine would be in if it were transitioned back to the initialized state.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_NOTIMPL | This method is not supported.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).

ppscript
[out] Address of a variable that receives a pointer to the IActiveScript interface of the cloned scripting engine. The host must create a site and call the IActiveScript::SetScriptSite method on the new scripting engine before it will be in the initialized state and, therefore, usable.

The IActiveScript::Clone method is an optimization of IPersist*::Save, CoCreateInstance, and IPersist*::Load, so the state of the new scripting engine should be the same as if the state of the original scripting engine were saved and loaded into a new scripting engine. Named items are duplicated in the cloned scripting engine, but specific object pointers for each item are forgotten and are obtained with the IActiveScriptSite::GetItemInfo method. This allows an identical object model with per-thread entry points (an apartment model) to be used.

This method is used for multithreaded server hosts that can run multiple instances of the same script. The scripting engine may return E_NOTIMPL, in which case the host can achieve the same result by duplicating the persistent state and creating a new instance of the scripting engine with an IPersist* interface.

This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.


IActiveScript::Close

Microsoft® Windows® Script Interfaces
IActiveScript::Close 		Language Reference
Previous
Next

HRESULT Close(void);

Causes the scripting engine to abandon any currently loaded script, lose its state, and release any interface pointers it has to other objects, thus entering a closed state. Event sinks, immediately executed script text, and macro invocations that are already in progress are completed before the state changes (use IActiveScript::InterruptScriptThread to cancel a running script thread). This method must be called by the creating host before the interface is released to prevent circular reference problems.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine was already in the closed state).
    OLESCRIPT_S_PENDING | The method was queued successfully, but the state hasn't changed yet. When the state changes, the site will be called back on the IActiveScriptSite::OnStateChange method.
    S_FALSE | The method succeeded, but the script was already closed.


IActiveScript::GetCurrentScriptThreadID

Microsoft® Windows® Script Interfaces
IActiveScript::GetCurrentScriptThreadID 		Language Reference
Previous
Next

HRESULT GetCurrentScriptThreadID(
    SCRIPTTHREADID *pstidThread  // receives scripting thread identifier
);

Retrieves a scripting-engine-defined identifier for the currently executing thread. The identifier can be used in subsequent calls to script thread execution-control methods such as the IActiveScript::InterruptScriptThread method.

  • Returns S_OK if successful, or E_POINTER if an invalid pointer was specified.
pstidThread
[out] Address of a variable that receives the script thread identifier associated with the current thread. The interpretation of this identifier is left to the scripting engine, but it can be just a copy of the Windows thread identifier. If the Win32 thread terminates, this identifier becomes unassigned and can subsequently be assigned to another thread.

This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.


IActiveScript::GetScriptDispatch

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptDispatch 		Language Reference
Previous
Next

HRESULT GetScriptDispatch(
    LPCOLESTR pstrItemName  // address of item name
    IDispatch **ppdisp      // receives IDispatch pointer
);

Retrieves the IDispatch interface for the methods and properties associated with the currently running script.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).
    S_FALSE | The scripting engine does not support a dispatch object; the ppdisp parameter is set to NULL.

pstrItemName
[in] Address of a buffer that contains the name of the item for which the caller needs the associated dispatch object. If this parameter is NULL, the dispatch object contains as its members all of the global methods and properties defined by the script. Through the IDispatch interface and the associated ITypeInfo interface, the host can invoke script methods or view and modify script variables.
ppdisp
[out] Address of a variable that receives a pointer to the object associated with the script's global methods and properties. If the scripting engine does not support such an object, NULL is returned.

Because methods and properties can be added by calling the IActiveScriptParse interface, the IDispatch interface returned by this method can dynamically support new methods and properties. Similarly, the IDispatch::GetTypeInfo method should return a new, unique ITypeInfo interface when methods and properties are added. Note, however, that language engines must not change the IDispatch interface in a way that is incompatible with any previous ITypeInfo interface returned. That implies, for example, that DISPIDs will never be reused.


IActiveScript::GetScriptSite

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptSite 		Language Reference
Previous
Next

HRESULT GetScriptSite(
    REFIID iid,           // interface identifier
    void **ppvSiteObject  // address of host site interface
);

Retrieves the site object associated with the Windows Script engine.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_NOINTERFACE | The specified interface is not supported.
    E_POINTER | An invalid pointer was specified.
    S_FALSE | No site has been set; the ppvSiteObject parameter is set to NULL.

iid
[in] Identifier of the requested interface.
ppvSiteObject
[out] Address of the location that receives the interface pointer to the host's site object.


IActiveScript::GetScriptState

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptState 		Language Reference
Previous
Next

HRESULT GetScriptState(
    SCRIPTSTATE *pss  // address of structure for state information
);

Retrieves the current state of the scripting engine. This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.

  • Returns S_OK if successful, or E_POINTER if an invalid pointer was specified.
pss
[out] Address of a variable that receives a value defined in the SCRIPTSTATE enumeration. The value indicates the current state of the scripting engine associated with the calling thread.


IActiveScript::GetScriptThreadID

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptThreadID 		Language Reference
Previous
Next

HRESULT GetScriptThreadID(
    DWORD dwWin32ThreadID,       // Win32 thread identifier
    SCRIPTTHREADID *pstidThread  // receives scripting thread identifier
);

Retrieves a scripting-engine-defined identifier for the thread associated with the given Win32 thread.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized) and therefore failed.

dwWin32ThreadID
[in] Thread identifier of a running Win32 thread in the current process. Use the GetCurrentScriptThreadID function to retrieve the thread identifier of the currently executing thread.
pstidThread
[out] Address of a variable that receives the script thread identifier associated with the given Win32 thread. The interpretation of this identifier is left to the scripting engine, but it can be just a copy of the Windows thread identifier. Note that if the Win32 thread terminates, this identifier becomes unassigned and may subsequently be assigned to another thread.

The retrieved identifier can be used in subsequent calls to script thread execution control methods such as the IActiveScript::InterruptScriptThread method.

This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.


IActiveScript::GetScriptThreadState

Microsoft® Windows® Script Interfaces
IActiveScript::GetScriptThreadState 		Language Reference
Previous
Next

HRESULT GetScriptThreadState(
    SCRIPTTHREADID stidThread,    // identifier of script thread
    SCRIPTTHREADSTATE *pstsState  // receives state flag
);

Retrieves the current state of a script thread.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).

stidThread
[in] Identifier of the thread for which the state is desired, or one of the following special thread identifiers:

Value | Meaning
SCRIPTTHREADID_BASE | The base thread; that is, the thread in which the scripting engine was instantiated.
SCRIPTTHREADID_CURRENT | The currently executing thread.

pstsState
[out] Address of a variable that receives the state of the indicated thread. The state is indicated by one of the named constant values defined by the SCRIPTTHREADSTATE enumeration. If this parameter does not identify the current thread, the state may change at any time.

This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.


IActiveScript::InterruptScriptThread

Microsoft® Windows® Script Interfaces
IActiveScript::InterruptScriptThread 		Language Reference
Previous
Next

HRESULT InterruptScriptThread(
    SCRIPTTHREADID   stidThread,  // identifier of thread
    const EXCEPINFO *pexcepinfo,  // receives error information
    DWORD dwFlags
);

Interrupts the execution of a running script thread (an event sink, an immediate execution, or a macro invocation). This method can be used to terminate a script that is stuck (in an infinite loop, for example). It can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite method.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized).

stidThread
[in] Identifier of the thread to interrupt, or one of the following special thread identifier values:

Value | Meaning
SCRIPTTHREADID_ALL | All threads. The interrupt is applied to all script methods currently in progress. Note that unless the caller has requested that the script be disconnected, by calling the IActiveScript::SetScriptState method with the SCRIPTSTATE_DISCONNECTED or SCRIPTSTATE_INITIALIZED flag set, the next scripted event causes script code to run again.
SCRIPTTHREADID_BASE | The base thread; that is, the thread in which the scripting engine was instantiated.
SCRIPTTHREADID_CURRENT | The currently executing thread.

pexcepinfo
[in] Address of an EXCEPINFO structure that receives error information associated with the error condition.
dwFlags
[in] Option flags associated with the interruption. Can be one of these values:

Value | Meaning
SCRIPTINTERRUPT_DEBUG | If supported, enter the scripting engine's debugger at the current script execution point.
SCRIPTINTERRUPT_RAISEEXCEPTION | If supported by the scripting engine's language, let the script handle the exception. Otherwise, the script method is aborted and the error code is returned to the caller; that is, the event source or macro invoker.


IActiveScript::SetScriptSite

Microsoft® Windows® Script Interfaces
IActiveScript::SetScriptSite 		Language Reference
Previous
Next

HRESULT SetScriptSite(
    IActiveScriptSite *pScriptSite  // address of host script site
);

Informs the scripting engine of the IActiveScriptSite interface site provided by the host. This method must be called before any other IActiveScript interface methods can be used.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_FAIL | An unspecified error occurred; the scripting engine was unable to finish initializing the site.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, a site was already set).

pScriptSite
[in] Address of the host-supplied script site to be associated with this instance of the scripting engine. The site must be uniquely assigned to this scripting engine instance; it cannot be shared with other scripting engines.


IActiveScript::SetScriptState

Microsoft® Windows® Script Interfaces
IActiveScript::SetScriptState 		Language Reference
Previous
Next

HRESULT SetScriptState(
    SCRIPTSTATE ss  // identifier of new state
);

Puts the scripting engine into the given state. This method can be called from non-base threads without resulting in a non-base callout to host objects or to the IActiveScriptSite interface.

  • Returns one of the following values:
    Return Value | Meaning
    S_OK | Success.
    E_FAIL | The scripting engine does not support the transition back to the initialized state. The host must discard this scripting engine and create, initialize, and load a new scripting engine to achieve the same effect.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized) and therefore failed.
    OLESCRIPT_S_PENDING | The method was queued successfully, but the state has not changed yet. When the state changes, the site will be called back through the IActiveScriptSite::OnStateChange method.
    S_FALSE | The method succeeded, but the script was already in the given state.
ss
[in] Sets the scripting engine to the given state. Can be one of the values defined in the SCRIPTSTATE enumeration.

For more information about scripting engine states, see Script Engine States.

See also IActiveScript::Clone, IActiveScript::GetScriptDispatch, IActiveScript::InterruptScriptThread, IActiveScriptParse::ParseScriptText, IActiveScriptSite::GetItemInfo


IActiveScriptError

Microsoft® Windows® Script Interfaces
IActiveScriptError 		Language Reference
Previous
Next

An object implementing this interface is passed to the IActiveScriptSite::OnScriptError method whenever the scripting engine encounters an unhandled error. The host then calls methods on this object to obtain information about the error that occurred.

Methods in Vtable Order

Method | Description
GetExceptionInfo | Retrieves information about an error.
GetSourcePosition | Retrieves the location in the source code where an error occurred.
GetSourceLineText | Retrieves the line in the source file where an error occurred.


IActiveScriptError::GetExceptionInfo

Microsoft® Windows® Script Interfaces
IActiveScriptError::GetExceptionInfo 		Language Reference
Previous
Next

HRESULT GetExceptionInfo(
    EXCEPINFO *pexcepinfo  // structure for exception information
);

Retrieves information about an error that occurred while the scripting engine was running a script.

  • Returns S_OK if successful, or E_FAIL if an error occurred.
pexcepinfo
[out] Address of an EXCEPINFO structure that receives error information.


IActiveScriptError::GetSourceLineText

Microsoft® Windows® Script Interfaces
IActiveScriptError::GetSourceLineText 		Language Reference
Previous
Next

HRESULT GetSourceLineText(
    BSTR *pbstrSourceLine  // address of buffer for source line
);

Retrieves the line in the source file where an error occurred while a scripting engine was running a script.

  • Returns S_OK if successful, or E_FAIL if the line in the source file was not retrieved.
pbstrSourceLine
[out] Address of a buffer that receives the line of source code in which the error occurred.


IActiveScriptError::GetSourcePosition

Microsoft® Windows® Script Interfaces
IActiveScriptError::GetSourcePosition 		Language Reference
Previous
Next

HRESULT GetSourcePosition(
    DWORD *pdwSourceContext,  // context cookie
    ULONG *pulLineNumber,     // line number of error
    LONG *pichCharPosition    // character position of error
);

Retrieves the location in the source code where an error occurred while the scripting engine was running a script.

  • Returns S_OK if successful, or E_FAIL if the location was not retrieved.
pdwSourceContext
[out] Address of a variable that receives a cookie that identifies the context. The interpretation of this parameter depends on the host application.
pulLineNumber
[out] Address of a variable that receives the line number in the source file where the error occurred.
pichCharPosition
[out] Address of a variable that receives the character position in the line where the error occurred.


IActiveScriptParse

Microsoft® Windows® Script Interfaces
IActiveScriptParse 		Language Reference
Previous
Next

If the Windows Script engine allows raw text code scriptlets to be added to the script or allows expression text to be evaluated at run time, it implements the IActiveScriptParse interface. For interpreted scripting languages that have no independent authoring environment, such as VBScript, this provides an alternate mechanism (other than IPersist*) to get script code into the scripting engine, and to attach script fragments to various object events.

Methods in Vtable Order

Method | Description
InitNew | Initializes the scripting engine.
AddScriptlet | Adds a code scriptlet to the script.
ParseScriptText | Parses the given code scriptlet, adding declarations into the name space and evaluating code as appropriate.


IActiveScriptParse::AddScriptlet

Microsoft® Windows® Script Interfaces
IActiveScriptParse::AddScriptlet 		Language Reference
Previous
Next

HRESULT AddScriptlet(
    LPCOLESTR pstrDefaultName,   // address of default name of scriptlet
    LPCOLESTR pstrCode,          // address of scriptlet text
    LPCOLESTR pstrItemName,      // address of item name
    LPCOLESTR pstrSubItemName,   // address of subitem name
    LPCOLESTR pstrEventName,     // address of event name
    LPCOLESTR pstrDelimiter,     // address of end-of-scriptlet delimiter
    DWORD dwSourceContextCookie, // application-defined value for debugging
    ULONG ulStartingLineNumber,  // starting line of the script
    DWORD dwFlags,               // scriptlet flags
    BSTR *pbstrName,             // address of actual name of scriptlet
    EXCEPINFO *pexcepinfo        // address of exception information
);

Adds a code scriptlet to the script. This method is used in environments where the persistent state of the script is intertwined with the host document and the host is responsible for restoring the script, rather than through an IPersist* interface. The primary examples are HTML scripting languages that allow scriptlets of code embedded in the HTML document to be attached to intrinsic events (for instance, ONCLICK="button1.text='Exit'").

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    DISP_E_EXCEPTION | An exception occurred in the parsing of the scriptlet; the pexcepinfo parameter contains information about the exception.
    E_INVALIDARG | An argument was invalid.
    E_NOTIMPL | This method is not supported; the scripting engine does not support adding event-sinking scriptlets.
    E_POINTER | An invalid pointer was specified.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine has not yet been loaded or initialized) and therefore failed.
    OLESCRIPT_E_INVALIDNAME | The default name supplied is invalid in this scripting language.
    OLESCRIPT_E_SYNTAX | An unspecified syntax error occurred in the scriptlet.

pstrDefaultName
[in] Address of a default name to associate with the scriptlet. If the scriptlet does not contain naming information (as in the ONCLICK example above), this name will be used to identify the scriptlet. If this parameter is NULL, the scripting engine manufactures a unique name, if necessary.
pstrCode
[in] Address of the scriptlet text to add. The interpretation of this string depends on the scripting language.
pstrItemName
[in] Address of a buffer that contains the item name associated with this scriptlet. This parameter, in addition to pstrSubItemName, identifies the object for which the scriptlet is an event handler.
pstrSubItemName
[in] Address of a buffer that contains the name of a subobject of the named item with which this scriptlet is associated; this name must be found in the named item's type information. This parameter is NULL if the scriptlet is to be associated with the named item instead of a subitem. This parameter, in addition to pstrItemName, identifies the specific object for which the scriptlet is an event handler.
pstrEventName
[in] Address of a buffer that contains the name of the event for which the scriptlet is an event handler.
pstrDelimiter
[in] Address of the end-of-scriptlet delimiter. When the pstrCode parameter is parsed from a stream of text, the host typically uses a delimiter, such as two single quotation marks ("), to detect the end of the scriptlet. This parameter specifies the delimiter that the host used, allowing the scripting engine to provide some conditional primitive preprocessing (for example, replacing a single quotation mark ['] with two single quotation marks for use as a delimiter). Exactly how (and if) the scripting engine makes use of this information depends on the scripting engine. Set this parameter to NULL if the host did not use a delimiter to mark the end of the scriptlet.
dwSourceContextCookie
[in] Application-defined value that is used for debugging purposes.
ulStartingLineNumber
[in] Zero-based value that specifies which line the parsing will begin at.
dwFlags
[in] Flags associated with the scriptlet. Can be a combination of the following values:

Return Value | Meaning
SCRIPTTEXT_ISVISIBLE | Indicates that the script text should be visible (and, therefore, callable by name) as a global method in the name space of the script.
SCRIPTTEXT_ISPERSISTENT | Indicates that the code added during this call should be saved if the scripting engine is saved (for example, through a call to IPersist*::Save), or if the scripting engine is reset by way of a transition back to the initialized state. For more information about this state, see Script Engine States.

pbstrName
[out] Actual name used to identify the scriptlet. This will be, in order of preference: a name explicitly specified in the scriptlet text, the default name provided in pstrDefaultName, or a unique name synthesized by the scripting engine.
pexcepinfo
[out] Address of a structure containing exception information. This structure should be filled in if DISP_E_EXCEPTION is returned.


IActiveScriptParse::InitNew

Microsoft® Windows® Script Interfaces
IActiveScriptParse::InitNew 		Language Reference
Previous
Next

HRESULT InitNew(void);

Initializes the scripting engine.

  • Returns S_OK if successful, or E_FAIL if an error occurred during initialization.

Before the scripting engine can be used, one of the following methods must be called: IPersist*::Load, IPersist*::InitNew, or IActiveScriptParse::InitNew. The semantics of this method are identical to IPersistStreamInit::InitNew, in that this method tells the scripting engine to initialize itself. Note that it is not valid to call both IPersist*::InitNew or IActiveScriptParse::InitNew and IPersist*::Load, nor is it valid to call IPersist*::InitNew, IActiveScriptParse::InitNew, or IPersist*::Load more than once.


IActiveScriptParse::ParseScriptText

Microsoft® Windows® Script Interfaces
IActiveScriptParse::ParseScriptText 		Language Reference
Previous
Next

HRESULT ParseScriptText(
    LPCOLESTR pstrCode,          // address of scriptlet text
    LPCOLESTR pstrItemName,      // address of item name
    IUnknown *punkContext,       // address of debugging context
    LPCOLESTR pstrDelimiter,     // address of end-of-scriptlet delimiter
    DWORD dwSourceContextCookie, // application-defined value for debugging
    ULONG ulStartingLineNumber,  // starting line of the script
    DWORD dwFlags,               // scriptlet flags
    VARIANT *pvarResult,         // address of buffer for results
    EXCEPINFO *pexcepinfo        // address of buffer for error data
);

Parses the given code scriptlet, adding declarations into the name space and evaluating code as appropriate.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    DISP_E_EXCEPTION | An exception occurred in the processing of the scriptlet. The pexcepinfo parameter contains information about the exception.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    E_NOTIMPL | This method is not supported. The scripting engine does not support run-time evaluation of expressions or statements.
    E_UNEXPECTED | The call was not expected (for example, the scripting engine is in the uninitialized or closed state, or the SCRIPTTEXT_ISEXPRESSION flag was set and the scripting engine is in the initialized state).
    OLESCRIPT_E_SYNTAX | An unspecified syntax error occurred in the scriptlet.

pstrCode
[in] Address of the scriptlet text to evaluate. The interpretation of this string depends on the scripting language.
pstrItemName
[in] Address of the item name that gives the context in which the scriptlet is to be evaluated. If this parameter is NULL, the code is evaluated in the scripting engine's global context.
punkContext
[in] Address of the context object. This object is reserved for use in a debugging environment, where such a context may be provided by the debugger to represent an active run-time context. If this parameter is NULL, the engine uses pstrItemName to identify the context.
pstrDelimiter
[in] Address of the end-of-scriptlet delimiter. When pstrCode is parsed from a stream of text, the host typically uses a delimiter, such as two single quotation marks ("), to detect the end of the scriptlet. This parameter specifies the delimiter that the host used, allowing the scripting engine to provide some conditional primitive preprocessing (for example, replacing a single quotation mark ['] with two single quotation marks for use as a delimiter). Exactly how (and if) the scripting engine makes use of this information depends on the scripting engine. Set this parameter to NULL if the host did not use a delimiter to mark the end of the scriptlet.
dwSourceContextCookie
[in] Application-defined value that is used for debugging purposes.
ulStartingLineNumber
[in] Zero-based value that specifies which line the parsing will begin at.
dwFlags
[in] Flags associated with the scriptlet. Can be a combination of these values:

Value | Meaning
SCRIPTTEXT_ISEXPRESSION | If the distinction between a computational expression and a statement is important but syntactically ambiguous in the script language, this flag specifies that the scriptlet is to be interpreted as an expression, rather than as a statement or list of statements. By default, statements are assumed unless the correct choice can be determined from the syntax of the scriptlet text.
SCRIPTTEXT_ISPERSISTENT | Indicates that the code added during this call should be saved if the scripting engine is saved (for example, through a call to IPersist*::Save), or if the scripting engine is reset by way of a transition back to the initialized state.
SCRIPTTEXT_ISVISIBLE | Indicates that the script text should be visible (and, therefore, callable by name) as a global method in the name space of the script.

pvarResult
[out] Address of a buffer that receives the results of scriptlet processing, or NULL if the caller expects no result (that is, the SCRIPTTEXT_ISEXPRESSION value is not set).
pexcepinfo
[out] Address of a structure that receives exception information. This structure is filled if IActiveScriptParse::ParseScriptText returns DISP_E_EXCEPTION.

If the scripting engine is in the initialized state, no code will actually be evaluated during this call; rather, such code is queued and executed when the scripting engine is transitioned into (or through) the started state. Because execution is not allowed in the initialized state, it is an error to call this method with the SCRIPTTEXT_ISEXPRESSION flag when in the initialized state.

The scriptlet can be an expression, a list of statements, or anything allowed by the script language. For example, this method is used in the evaluation of the HTML <SCRIPT> tag, which allows statements to be executed as the HTML page is being constructed, rather than just compiling them into the script state.

The code passed to this method must be a valid, complete portion of code. For example, in VBScript it is illegal to call this method once with Sub Function(x) and then a second time with End Sub. The parser must not wait for the second call to complete the subroutine, but rather must generate a parse error because a subroutine declaration was started but not completed.

For more information about script states, see Script Engine States.


IActiveScriptSite

Microsoft® Windows® Script Interfaces
IActiveScriptSite 		Language Reference
Previous
Next

The host must create a site for the Windows Script engine by implementing the IActiveScriptSite interface. Usually, this site will be associated with the container of all the objects that are visible to the script (for example, the ActiveX Controls). Typically, this container will correspond to the document or page being viewed. Microsoft Internet Explorer, for example, would create such a container for each HTML page being displayed. Each ActiveX control (or other automation object) on the page, and the scripting engine itself, would be enumerable within this container.

Methods in Vtable Order

Method | Description
GetLCID | Retrieves the locale identifier that the host uses for displaying user-interface elements.
GetItemInfo | Obtains information about an item that was added to an engine through a call to the IActiveScript::AddNamedItem method.
GetDocVersionString | Retrieves a host-defined string that uniquely identifies the current document version from the host's point of view.
OnScriptTerminate | Called when the script has completed execution.
OnStateChange | Informs the host that the scripting engine has changed states.
OnScriptError | Informs the host that an execution error occurred while the engine was running the script.
OnEnterScript | Informs the host that the scripting engine has begun executing the script code.
OnLeaveScript | Informs the host that the scripting engine has returned from executing script code.


IActiveScriptSite::GetDocVersionString

Microsoft® Windows® Script Interfaces
IActiveScriptSite::GetDocVersionString 		Language Reference
Previous
Next

HRESULT GetDocVersionString(
    BSTR *pbstrVersionString  // address of document version string
);

Retrieves a host-defined string that uniquely identifies the current document version. If the related document has changed outside the scope of Windows Script (as in the case of an HTML page being edited with NotePad), the scripting engine can save this along with its persisted state, forcing a recompile the next time the script is loaded.

  • Returns S_OK if successful, or E_NOTIMPL if this method is not supported.
pstrVersionString
[out] Address of the host-defined document version string.

If E_NOTIMPL is returned, the scripting engine should assume that the script is in sync with the document.


IActiveScriptSite::GetItemInfo

Microsoft® Windows® Script Interfaces
IActiveScriptSite::GetItemInfo 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::GetItemInfo(
    LPCOLESTR pstrName,     // address of item name
    DWORD dwReturnMask,     // bit mask for information retrieval
    IUnknown **ppunkItem,   // address of pointer to item's IUnknown
    ITypeInfo **ppTypeInfo  // address of pointer to item's ITypeInfo
);

Allows the scripting engine to obtain information about an item added with the IActiveScript::AddNamedItem method.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_INVALIDARG | An argument was invalid.
    E_POINTER | An invalid pointer was specified.
    TYPE_E_ELEMENTNOTFOUND | An item of the specified name was not found.

pstrName
[in] The name associated with the item, as specified in the IActiveScript::AddNamedItem method.
dwReturnMask
[in] A bit mask specifying what information about the item should be returned. The scripting engine should request the minimum amount of information possible because some of the return parameters (for example, ITypeInfo) can take considerable time to load or generate. Can be a combination of the following values:

Value | Meaning
SCRIPTINFO_IUNKNOWN | Return the IUnknown interface for this item.
SCRIPTINFO_ITYPEINFO | Return the ITypeInfo interface for this item.

ppunkItem
[out] Address of a variable that receives a pointer to the IUnknown interface associated with the given item. The scripting engine can use the IUnknown::QueryInterface method to obtain the IDispatch interface for the item. This parameter receives NULL if dwReturnMask does not include the SCRIPTINFO_IUNKNOWN value. Also, it receives NULL if there is no object associated with the item name; this mechanism is used to create a simple class when the named item was added with the SCRIPTITEM_CODEONLY flag set in the IActiveScript::AddNamedItem method.
ppTypeInfo
[out] Address of a variable that receives a pointer to the ITypeInfo interface associated with the item. This parameter receives NULL if dwReturnMask does not include the SCRIPTINFO_ITYPEINFO value, or if type information is not available for this item. If type information is not available, the object cannot source events, and name binding must be realized with the IDispatch::GetIDsOfNames method. Note that the ITypeInfo interface retrieved describes the item's coclass (TKIND_COCLASS) because the object may support multiple interfaces and event interfaces. If the item supports the IProvideMultipleTypeInfo interface, the ITypeInfo interface retrieved is the same as the index zero ITypeInfo that would be obtained using the IProvideMultipleTypeInfo::GetInfoOfIndex method.

This method retrieves only the information indicated by the dwReturnMask parameter; this improves performance. For example, if an ITypeInfo interface is not needed for an item, it is simply not specified in dwReturnMask.


IActiveScriptSite::GetLCID

Microsoft® Windows® Script Interfaces
IActiveScriptSite::GetLCID 		Language Reference
Previous
Next

HRESULT GetLCID(
    LCID *plcid  // address of variable for language identifier
);

Retrieves the locale identifier associated with the host's user interface. The scripting engine uses the identifier to ensure that error strings and other user-interface elements generated by the engine appear in the appropriate language.

  • Returns one of the following values:

    Return Value | Meaning
    S_OK | Success.
    E_NOTIMPL | This method is not implemented. Use the system-defined locale.
    E_POINTER | An invalid pointer was specified.

plcid
[out] Address of a variable that receives the locale identifier for user-interface elements displayed by the scripting engine.

If this method returns E_NOTIMPL, the system-defined locale identifier should be used.


IActiveScriptSite::OnEnterScript

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnEnterScript 		Language Reference
Previous
Next

HRESULT OnEnterScript(void);

Informs the host that the scripting engine has begun executing the script code.

  • Returns S_OK if successful.

The scripting engine must call this method on every entry or reentry into the scripting engine. For example, if the script calls an object that then fires an event handled by the scripting engine, the scripting engine must call IActiveScriptSite::OnEnterScript before executing the event, and must call the IActiveScriptSite::OnLeaveScript method after executing the event but before returning to the object that fired the event. Calls to this method can be nested. Every call to this method requires a corresponding call to IActiveScriptSite::OnLeaveScript.


IActiveScriptSite::OnLeaveScript

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnLeaveScript 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::OnLeaveScript(void);

Informs the host that the scripting engine has returned from executing script code.

  • Returns S_OK if successful.

The scripting engine must call this method before returning control to a calling application that entered the scripting engine. For example, if the script calls an object that then fires an event handled by the scripting engine, the scripting engine must call the IActiveScriptSite::OnEnterScript method before executing the event, and must call IActiveScriptSite::OnLeaveScript after executing the event before returning to the object that fired the event. Calls to this method can be nested. Every call to IActiveScriptSite::OnEnterScript requires a corresponding call to this method.


IActiveScriptSite::OnScriptError

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnScriptError 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::OnScriptError(
    IActiveScriptError *pase  // address of error interface
);

Informs the host that an execution error occurred while the engine was running the script.

  • Returns S_OK if the error was correctly handled, or an OLE defined error code otherwise.
pase
[in] Address of the error object's IActiveScriptError interface. A host can use this interface to obtain information about the execution error.


IActiveScriptSite::OnScriptTerminate

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnScriptTerminate 		Language Reference
Previous
Next

HRESULT OnScriptTerminate(
    VARIANT *pvarResult,   // address of script results
    EXCEPINFO *pexcepinfo  // address of structure with exception information
);

Informs the host that the script has completed execution.

  • Returns S_OK if successful.
pvarResult
[in] Address of a variable that contains the script result, or NULL if the script produced no result.
pexcepinfo
[in] Address of an EXCEPINFO structure that contains exception information generated when the script terminated, or NULL if no exception was generated.

The scripting engine calls this method before the call to the IActiveScriptSite::OnStateChange method, with the SCRIPTSTATE_INITIALIZED flag set, is completed. This method can be used to return completion status and results to the host. Note that many script languages, which are based on sinking events from the host, have life spans that are defined by the host. In this case, this method may never be called.


IActiveScriptSite::OnStateChange

Microsoft® Windows® Script Interfaces
IActiveScriptSite::OnStateChange 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::OnStateChange(
    SCRIPTSTATE ssScriptState  // new state of engine
);

Informs the host that the scripting engine has changed states.

  • Returns S_OK if successful.
ssScriptState
[in] Value that indicates the new script state. See the IActiveScript::GetScriptState method for a description of the states.


IActiveScriptSiteWindow

Microsoft® Windows® Script Interfaces
IActiveScriptSiteWindow 		Language Reference
Previous
Next

This interface is implemented by hosts that support a user interface on the same object as IActiveScriptSite. Hosts that do not support a user interface, such as servers, would not implement the IActiveScriptSiteWindow interface. The scripting engine accesses this interface by calling QueryInterface from IActiveScriptSite.

Methods in Vtable Order

Method | Description
GetWindow | Retrieves the window handle that can act as the owner of a pop-up window that the scripting engine must display.
EnableModeless | Causes the host to enable or disable its main window as well as any modeless dialog boxes.


IActiveScriptSiteWindow::EnableModeless

Microsoft® Windows® Script Interfaces
IActiveScriptSiteWindow::EnableModeless 		Language Reference
Previous
Next

HRESULT IActiveScriptSite::EnableModeless(
    BOOL fEnable  // enable flag
);

Causes the host to enable or disable its main window as well as any modeless dialog boxes.

  • Returns S_OK if successful, or E_FAIL if an error occurred.
fEnable
[in] Flag that, if TRUE, enables the main window and modeless dialogs or, if FALSE, disables them.

This method is identical to the IOleInPlaceFrame::EnableModeless method.

Calls to this method can be nested.


IActiveScriptSiteWindow::GetWindow

Microsoft® Windows® Script Interfaces
IActiveScriptSiteWindow::GetWindow 		Language Reference
Previous
Next

HRESULT GetWindow(
    HWND *phwnd  // address of variable for window handle
);

Retrieves the handle to a window that can act as the owner of a pop-up window that the scripting engine must display.

  • Returns S_OK if successful, or E_FAIL if an error occurred.
phwnd
[out] Address of a variable that receives the window handle.

This method is similar to the IOleWindow::GetWindow method.


Enumerations

Microsoft® Windows® Script Interfaces
Enumerations 		Language Reference
Previous
Next

This section describes the enumerations used by Windows Script engines.

  • SCRIPTSTATE
  • SCRIPTTHREADSTATE


SCRIPTSTATE

Microsoft® Windows® Script Interfaces
SCRIPTSTATE 		Language Reference
Previous
Next

typedef enum tagSCRIPTSTATE {
    SCRIPTSTATE_UNINITIALIZED = 0,
    SCRIPTSTATE_INITIALIZED   = 5,
    SCRIPTSTATE_STARTED       = 1,
    SCRIPTSTATE_CONNECTED     = 2,
    SCRIPTSTATE_DISCONNECTED  = 3,
    SCRIPTSTATE_CLOSED        = 4
} SCRIPTSTATE;

Contains named constant values that specify the state of a scripting engine. This enumeration is used by the IActiveScript::GetScriptState, IActiveScript::SetScriptState, and IActiveScriptSite::OnStateChange methods.

SCRIPTSTATE_UNINITIALIZED
Script has just been created, but has not yet been initialized using an IPersist* interface and IActiveScript::SetScriptSite.
SCRIPTSTATE_INITIALIZED
Script has been initialized, but is not running (connecting to other objects or sinking events) or executing any code. Code can be queried for execution by calling the IActiveScriptParse::ParseScriptText method.
SCRIPTSTATE_STARTED
Script can execute code, but is not yet sinking the events of objects added by the IActiveScript::AddNamedItem method.
SCRIPTSTATE_CONNECTED
Script is loaded and connected for sinking events.
SCRIPTSTATE_DISCONNECTED
Script is loaded and has a run-time execution state, but is temporarily disconnected from sinking events.
SCRIPTSTATE_CLOSED
Script has been closed. The scripting engine no longer works and returns errors for most methods.


SCRIPTTHREADSTATE

Microsoft® Windows® Script Interfaces
SCRIPTTHREADSTATE 		Language Reference
Previous

typedef enum tagSCRIPTTHREADSTATE {
    SCRIPTTHREADSTATE_NOTINSCRIPT  = 0,
    SCRIPTTHREADSTATE_RUNNING      = 1
} SCRIPTTHREADSTATE;

Contains named constant values that specify the state of a thread in a scripting engine. This enumeration is used by the IActiveScript::GetScriptThreadState method.

SCRIPTTHREADSTATE_NOTINSCRIPT
Specified thread is not currently servicing a scripted event, processing immediately executed script text, or running a script macro.
SCRIPTTHREADSTATE_RUNNING
Specified thread is actively servicing a scripted event, processing immediately executed script text, or running a script macro.


IDispatchEx Interface

IDispatchEx, an extension of the IDispatch interface, supports features appropriate for dynamic languages such as scripting languages. This section describes the IDispatchEx interface itself, the differences between IDispatch and IDispatchEx, and the rationale for the extensions. It is expected that readers are familiar with IDispatch and have access to the IDispatch documentation.

Remarks

IDispatch was developed essentially for Microsoft® Visual Basic®. The primary limitation of IDispatch is that it assumes that objects are static. In other words, since objects do not change during run time, type information can fully describe them at compile time. Dynamic run-time models that are found in scripting languages such as Visual Basic Scripting Edition (VBScript) and JScript and object models such as Dynamic HTML require a more flexible interface.

IDispatchEx was developed to provide all the services of IDispatch as well as some extensions that are appropriate for more dynamic late-bound languages such as scripting languages. The additional features of IDispatchEx beyond those provided by IDispatch are:

  • Add new members to an object ("expando") — use GetDispID with the fdexNameEnsure flag.
  • Delete members of an object — use DeleteMemberByName or DeleteMemberByDispID.
  • Case-sensitive dispatch operations — use fdexNameCaseSensitive or fdexNameCaseInsensitive.
  • Search for member with implicit name — use fdexNameImplicit.
  • Enumerate DISPIDs of an object — use GetNextDispID.
  • Map from DISPID to element name — use GetMemberName.
  • Obtain properties of object members — use GetMemberProperties.
  • Method invocation with this pointer — use InvokeEx with DISPATCH_METHOD.
  • Allow browsers that support the concept of name spaces to obtain the name space parent of an object — use GetNameSpaceParent.

Objects that support IDispatchEx might also support IDispatch for backward compatibility. The dynamic nature of objects that support IDispatchEx has a few implications for the IDispatch interface of those objects. For example, IDispatch makes the following assumption:

The member and parameter DISPIDs must remain constant for the lifetime of the object. This allows a client to obtain DISPIDs once and cache them for later use.

Since IDispatchEx allows the addition and deletion of members, the set of valid DISPIDs does not remain constant. However, IDispatchEx requires that the mapping between DISPID and member name remain constant. This means that if a member is deleted:

  • The DISPID cannot be reused until a member with the same name is created.
  • The DISPID must remain valid for GetNextDispID.
  • The DISPID must be accepted gracefully by any of the IDispatch/IDispatchEx methods — they must recognize the member as deleted and return an appropriate error code (usually DISP_E_MEMBERNOTFOUND or S_FALSE).

Examples

This JScript code in the function test() does the following:

  • Creates a new object by calling the Object constructor and assigns a pointer to the new object to the variable Obj.
  • Creates a new element named Elem in the object and assigns to this element a pointer to the function cat.
  • Calls this function. Since it is being called as a method, the this pointer refers to the object Obj. The function adds a new element, Bar, to the object.

The full HTML code is:

   <HTML>
   <BODY>
   <SCRIPT LANGUAGE="JScript">
   function cat()
   {
      // Create new element and assign the value 10
      this.Bar = 10;
   }

   function test()
   {
      // Construct new object
      Obj = new Object();

      // Create new element and assign function pointer
      Obj.Elem = cat;

      // Call Elem method ("this" == Obj)
      Obj.Elem();

      // Obj.Bar now exists
   }
   test();
   </SCRIPT>
   </BODY>
   </HTML>

A control placed on this same Web page could obtain a dispatch pointer to the script engines from the browser. The control could then implement the function test():

   <HTML>
   <BODY>
   <SCRIPT LANGUAGE="JScript">
   function cat()
   {
      // Create new element and assign the value 10
      this.Bar = 10;
   }
   </SCRIPT>
   <OBJECT ID="test" <CLASSID="CLSID:9417DB5D-FA2A-11D0-8CB3-00C04FC2B085">>
   </OBJECT>
   </BODY>
   </HTML>

Code from the control, test, does the same thing as the JScript function test(). Note that these dispatch calls are made into the running JScript engine and change the state of the engine:

  • Obtains the dispatch pointer to the cat function using GetDispID().
  • Obtains the dispatch pointer to the Object function using GetDispID().
  • Constructs an object by calling the Object function with InvokeEx() and obtains a dispatch pointer to the newly constructed object.
  • Creates a new element, Elem, in the object using GetDispID() with the fdexNameEnsure flag.
  • Puts the dispatch pointer to cat in the element using InvokeEx().
  • Calls the dispatch pointer to cat as a method by calling InvokeEx() and passing in the dispatch pointer to the constructed object as the this pointer.
  • The cat method creates a new element, Bar, on the current this object.
  • Verifies that the new element, Bar, was created in the constructed object by enumerating through the elements using GetNextDispID().

The code for the test control:

   BOOL test(IDispatchEx *pdexScript)
   {
      HRESULT hr;
      VARIANT var;
      BSTR bstrName;
      DISPID dispid, putid;
      IDispatchEx *pdexObj;
      IDispatch   *pdispObj, *pdispCat;
      DISPPARAMS dispparams, dispparamsNoArgs = {NULL, NULL, 0, 0};

      // Get dispatch pointer for "cat"
      bstrName = SysAllocString(OLESTR("cat"));
      pdexScript->GetDispID(bstrName, 0, &dispid);
      SysFreeString(bstrName);
      pdexScript->InvokeEx(dispid, LOCALE_USER_DEFAULT,
         DISPATCH_PROPERTYGET, &dispparamsNoArgs,
         &var, NULL, NULL);
      pdispCat = var.pdispVal;

      // Create object by calling "Object" constructor
      bstrName = SysAllocString(OLESTR("Object"));
      pdexScript->GetDispID(bstrName, 0, &dispid);
      SysFreeString(bstrName);
      pdexScript->InvokeEx(dispid, LOCALE_USER_DEFAULT,
         DISPATCH_CONSTRUCT, &dispparamsNoArgs,
         &var, NULL, NULL);
      pdispObj = var.pdispVal;
      pdispObj->QueryInterface(IID_IDispatchEx, (void **)&pdexObj);

      // Create new element in object
      bstrName = SysAllocString(OLESTR("Elem"));
      pdexObj->GetDispID(bstrName, fdexNameEnsure, &dispid);
      SysFreeString(bstrName);

      // Assign "cat" dispatch pointer to element
      putid = DISPID_PROPERTYPUT;
      var.vt = VT_DISPATCH;
      var.pdispVal = pdispCat;
      dispparams.rgvarg = &var;
      dispparams.rgdispidNamedArgs = &putid;
      dispparams.cArgs = 1;
      dispparams.cNamedArgs = 1;
      pdexObj->InvokeEx(dispid, LOCALE_USER_DEFAULT,
         DISPATCH_PROPERTYPUTREF, &dispparams,
         NULL, NULL, NULL);

      // Invoke method with "this" pointer
      putid = DISPID_THIS;
      var.vt = VT_DISPATCH;
      var.pdispVal = pdispObj;
      dispparams.rgvarg = &var;
      dispparams.rgdispidNamedArgs = &putid;
      dispparams.cArgs = 1;
      dispparams.cNamedArgs = 1;
      pdexObj->InvokeEx(dispid, LOCALE_USER_DEFAULT,
         DISPATCH_METHOD, &dispparams,
      NULL, NULL, NULL);

      // Confirm that new element "Bar" is in object
      hr = pdexObj->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid);
      while (hr != S_FALSE)
      {
         pdexObj->GetMemberName(dispid, &bstrName);
         if (!wcscmp(bstrName, OLESTR("Bar")))
            return TRUE;
         SysFreeString(bstrName);
         hr = pdexObj->GetNextDispID(fdexEnumAll, dispid, &dispid);
      }
      return FALSE;
   }

Methods

IDispatchEx Methods

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx Methods

In This Section

IDispatchEx::DeleteMemberByDispID
Deletes a member by DISPID.
IDispatchEx::DeleteMemberByName
Deletes a member by name.
IDispatchEx::GetDispID
Maps a single member name to its corresponding DISPID, which can then be used on subsequent calls to IDispatchEx::InvokeEx.
IDispatchEx::GetMemberName
Retrieves the name of a member.
IDispatchEx::GetMemberProperties
Retrieves a member's properties.
IDispatchEx::GetNameSpaceParent
Retrieves the interface for the namespace parent of an object.
IDispatchEx::GetNextDispID
Enumerates the members of the object.
IDispatchEx::InvokeEx
Provides access to properties and methods exposed by an IDispatchEx object.

Related Section

IDispatchEx Interface

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::DeleteMemberByDispID

Deletes a member by DISPID.

HRESULT DeleteMemberByDispID(
    DISPID id
);

Returns one of the following values:

S_OK | Success.
S_FALSE | Member exists but cannot be deleted.

Parameters

id
Member identifier. Uses GetDispID or GetNextDispID to obtain the dispatch identifier.

Remarks

If the member is deleted, the DISPID needs to remain valid for GetNextDispID.

If a member with a given name is deleted and later a member with the same name is recreated, the DISPID should be the same. (Whether member names that differ only by case are the "same" is object-dependent.)

Example

BSTR bstrName;
DISPID dispid;
IDispatch *pdex;

// Assign to pdex and bstrName
pdex->GetDispID(bstrName, fdexNameCaseSensitive, &dispid);
pdex->DeleteMemberByDispID(dispid);

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::DeleteMemberByName

Deletes a member by name.

HRESULT DeleteMemberByName(
   BSTR bstrName,
   DWORD grfdex
);

Returns one of the following values:

S_OK | Success.
S_FALSE | Member exists but cannot be deleted.

Parameters

bstrName
Name of member to be deleted.
grfdex
Determines if the member name is case sensitive. This can be one of the following values:
Value | Meaning
fdexNameCaseSensitive | Requests that the name lookup be done in a case-sensitive manner. Can be ignored by object that does not support case-sensitive lookup.
fdexNameCaseInsensitive | Requests that the name lookup be done in a case-insensitive manner. Can be ignored by object that does not support case-insensitive lookup.

Remarks

If the member is deleted, the DISPID needs to remain valid for GetNextDispID.

If a member with a given name is deleted and later a member with the same name is recreated, the DISPID should be the same. (Whether members that differ only by case are the "same" is object-dependent.)

Example

BSTR bstrName;
IDispatch *pdex;

// Assign to pdex and bstrName
pdex->DeleteMemberByName(bstrName, fdexNameCaseSensitive);

See Also

IDispatchEx Interface

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetDispID

Maps a single member name to its corresponding DISPID, which can then be used on subsequent calls to IDispatchEx::InvokeEx.

 HRESULT GetDispID(
   BSTR bstrName,
   DWORD grfdex,
   DISPID *pid
);

Returns one of the following values:

S_OK | Success.
E_OUTOFMEMORY | Out of Memory.
DISP_E_UNKNOWNNAME | The name was not known.

Parameters

bstrName
Passed in name to be mapped.
grfdex
Determines the options for obtaining the member identifier. This can be a combination of the following values:
Value | Meaning
fdexNameCaseSensitive | Requests that the name lookup be done in a case-sensitive manner. May be ignored by object that does not support case-sensitive lookup.
fdexNameEnsure | Requests that the member be created if it does not already exist. The new member should be created with the value VT_EMPTY.
fdexNameImplicit | Indicates that the caller is searching object(s) for a member of a particular name when the base object is not explicitly specified.
fdexNameCaseInsensitive | Requests that the name lookup be done in a case-insensitive manner. May be ignored by object that does not support case-insensitive lookup.
pid
Pointer to caller-allocated location to receive DISPID result. If an error occurs, pid contains DISPID_UNKNOWN.

Remarks

GetDispID can be used instead of GetIDsOfNames to obtain the DISPID for a given member.

Because IDispatchEx allows the addition and deletion of members, the set of DISPIDs does not remain constant for the lifetime of an object.

The unused riid parameter in IDispatch::GetIDsOfNames has been removed.

Example

BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;

   // Assign to pdex and bstrName
   pdex->GetDispID(bstrName, fdexNameCaseSensitive, &dispid);
   // Use dispid

See Also

IDispatchEx Interface

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetMemberName

Retrieves the name of a member.

HRESULT GetMemberName(
   DISPID id,
   BSTR *pbstrName
);

Returns one of the following values:

S_OK | Success.
DISP_E_UNKNOWNNAME | The name was not known.

Parameters

id
Identifies the member. Uses GetDispID or GetNextDispID to obtain the dispatch identifier.
pbstrName
Address of a BSTR that receives the name of the member. The calling application is responsible for freeing this value.

Example

HRESULT hr;
   BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;

   // Assign to pdex
   hr = pdex->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid);
   while (hr != S_FALSE)
   {
   pdex->GetMemberName(dispid, &bstrName);
   if (!wcscmp(bstrName, OLESTR("Bar")))
      return TRUE;
   SysFreeString(bstrName);
   hr = pdexObj->GetNextDispID(fdexEnumAll, dispid, &dispid);
}

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetMemberProperties

Retrieves a member's properties.

HRESULT GetMemberProperties(
   DISPID id,
   DWORD grfdexFetch,
   DWORD *pgrfdex
);

Returns one of the following values:

S_OK | Success.
DISP_E_UNKNOWNNAME | The name was not known.

Parameters

id
Identifies the member. Uses GetDispID or GetNextDispID to obtain the dispatch identifier.
grfdexFetch
Determines which properties to retrieve. This can be a combination of the values listed under pgrfdex and/or a combination of the following values:
Value | Meaning
grfdexPropCanAll | Combines fdexPropCanGet, fdexPropCanPut, fdexPropCanPutRef, fdexPropCanCall, fdexPropCanConstruct and fdexPropCanSourceEvents.
grfdexPropCannotAll | Combines fdexPropCannotGet, fdexPropCannotPut, fdexPropCannotPutRef, fdexPropCannotCall, fdexPropCannotConstruct and fdexPropCannotSourceEvents.
grfdexPropExtraAll | Combines fdexPropNoSideEffects and fdexPropDynamicType.
grfdexPropAll | Combines grfdexPropCanAll, grfdexPropCannotAll and grfdexPropExtraAll.
pgrfdex
Address of a DWORD that receives the requested properties. This can be a combination of the following values:
Value | Meaning
fdexPropCanGet | The member can be obtained using DISPATCH_PROPERTYGET.
fdexPropCannotGet | The member cannot be obtained using DISPATCH_PROPERTYGET.
fdexPropCanPut | The member can be set using DISPATCH_PROPERTYPUT.
fdexPropCannotPut | The member cannot be set using DISPATCH_PROPERTYPUT.
fdexPropCanPutRef | The member can be set using DISPATCH_PROPERTYPUTREF.
fdexPropCannotPutRef | The member cannot be set using DISPATCH_PROPERTYPUTREF.
fdexPropNoSideEffects | The member does not have any side effects. For example, a debugger could safely get/set/call this member without changing the state of the script being debugged.
fdexPropDynamicType | The member is dynamic and can change during the lifetime of the object.
fdexPropCanCall | The member can be called as a method using DISPATCH_METHOD.
fdexPropCannotCall | The member cannot be called as a method using DISPATCH_METHOD.
fdexPropCanConstruct | The member can be called as a constructor using DISPATCH_CONSTRUCT.
fdexPropCannotConstruct | The member cannot be called as a constructor using DISPATCH_CONSTRUCT.
fdexPropCanSourceEvents | The member can fire events.
fdexPropCannotSourceEvents | The member cannot fire events.

Example

BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;
   DWORD dwProps;

   // Assign to pdex and bstrName
   pdex->GetDispID(bstrName, fdexNameCaseSensitive, &dispid);
   pdex->GetMemberProperties(dispid, grfdexPropAll, &dwProps);
   if (dwProps & fdexPropCanPut)
      // Assign to member

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetNameSpaceParent

Retrieves the interface for the namespace parent of an object.

HRESULT GetNameSpaceParent(
   IUnknown **ppunk
);

Returns S_OK if successful or an OLE-defined error code otherwise.

Parameters

ppunk
Address of an IUnknown interface pointer that receives the namespace parent's interface.

See Also

IDispatchEx Interface

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::GetNextDispID

Enumerates the members of the object.

HRESULT GetNextDispID(
   DWORD grfdex,
   DISPID id,
   DISPID *pid
);

Returns one of the following values:

S_OK | Success.
S_FALSE | Enumeration is done.

Parameters

grfdex
Determines which set of items will be enumerated. This can be a combination of the following values:
Value | Meaning
fdexEnumDefault | Requests that the object enumerates the default elements. The object is allowed to enumerate any set of elements.
fdexEnumAll | Requests that the object enumerates all of the elements. The object is allowed to enumerate any set of elements.
id
Identifies the current member. GetNextDispID will retrieve the item in the enumeration after this one. Uses GetDispID or a previous call to GetNextDispID to obtain this identifier. Uses the DISPID_STARTENUM value to obtain the first identifier of the first item.
pid
Address of a DISPID variable that receives the identifier of the next item in the enumeration.

If a member is deleted by DeleteMemberByName or DeleteMemberByDispID, the DISPID needs to remain valid for GetNextDispID.

Example

HRESULT hr;
   BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;

   // Assign to pdex
   hr = pdex->GetNextDispID(fdexEnumAll, DISPID_STARTENUM, &dispid);
   while (hr != S_FALSE)
   {
      pdex->GetMemberName(dispid, &bstrName);
      if (!wcscmp(bstrName, OLESTR("Bar")))
      return TRUE;
      SysFreeString(bstrName);

      hr = pdexObj->GetNextDispID(fdexEnumAll, dispid, &dispid);
   }

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID | IDispatchEx::DeleteMemberByName | IDispatchEx::DeleteMemberByDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


IDispatchEx::InvokeEx

Provides access to properties and methods exposed by an IDispatchEx object.

HRESULT InvokeEx(
   DISPID id,
   LCID lcid,
   WORD wFlags,
   DISPARAMS *pdp,
   VARIANT *pVarRes,
   EXCEPINFO *pei,
   IServiceProvider *pspCaller
);

Returns one of the following values:

S_OK | Success.
DISP_E_BADPARAMCOUNT | The number of elements provided to DISPPARAMS is different from the number of arguments accepted by the method or property.
DISP_E_BADVARTYPE | One of the arguments in rgvarg is not a valid variant type.
DISP_E_EXCEPTION | The application needs to raise an exception. In this case, the structure passed in pei should be filled in.
DISP_E_MEMBERNOTFOUND | The requested member does not exist, or the call to InvokeEx tried to set the value of a read-only property.
DISP_E_NONAMEDARGS | This implementation of IDispatch does not support named arguments.
DISP_E_OVERFLOW | One of the arguments in rgvarg could not be coerced to the specified type.
DISP_E_PARAMNOTFOUND | One of the parameter DISPIDs does not correspond to a parameter on the method.
DISP_E_TYPEMISMATCH | One or more of the arguments could not be coerced.
DISP_E_UNKNOWNLCID | The member being invoked interprets string arguments according to the LCID, and the LCID is not recognized. If the LCID is not needed to interpret arguments, this error should not be returned.
DISP_E_PARAMNOTOPTIONAL | A required parameter was omitted.

Parameters

id
Identifies the member. Uses GetDispID or GetNextDispID to obtain the dispatch identifier.
lcid
The locale context in which to interpret arguments. The lcid is passed to InvokeEx to allow the object to interpret its arguments specific to a locale.
wFlags
Flags describing the context of the InvokeEx call:
Value | Meaning
DISPATCH_METHOD | The member is invoked as a method. If a property has the same name, both this and the DISPATCH_PROPERTYGET flag may be set (defined by IDispatch).
DISPATCH_PROPERTYGET | The member is retrieved as a property or data member (defined by IDispatch).
DISPATCH_PROPERTYPUT | The member is changed as a property or data member (defined by IDispatch).
DISPATCH_PROPERTYPUTREF | The member is changed by a reference assignment rather than a value assignment. This flag is valid only when the property accepts a reference to an object (defined by IDispatch).
DISPATCH_CONSTRUCT The member is being used as a constructor. (This is a new value defined by IDispatchEx). The legal values for wFlags are:
DISPATCH_PROPERTYGET
DISPATCH_METHOD
DISPATCH_PROPERTYGET
DISPATCH_METHOD
DISPATCH_PROPERTYPUT
DISPATCH_PROPERTYPUTREF
DISPATCH_PROPERTYPUT
DISPATCH_PROPERTYPUTREF
DISPATCH_CONSTRUCT
pdp
Pointer to a structure containing an array of arguments, an array of argument DISPIDs for named arguments, and counts for the number of elements in the arrays. See the IDispatch documentation for a full description of the DISPPARAMS structure.
pVarRes
Pointer to the location where the result is to be stored or Null if the caller expects no result. This argument is ignored if DISPATCH_PROPERTYPUT or DISPATCH_PROPERTYPUTREF is specified.
pei
Pointer to a structure that contains exception information. This structure should be filled in if DISP_E_EXCEPTION is returned. Can be Null. See the IDispatch documentation for a full description of the EXCEPINFO structure.
pspCaller
Pointer to a service provider object supplied by the caller, which allows the object to obtain services from the caller. Can be Null.

IDispatchEx::InvokeEx provides all of the same features as IDispatch::Invoke and adds a few extensions:

DISPATCH_CONSTRUCT | Indicates that the item is being used as a constructor.
pspCaller | The pspCaller allows the object access to services provided by the caller. Specific services may be handled by the caller itself or delegated to callers further up the call chain. For example, if a script engine inside a browser makes an InvokeEx call to an external object, the object can follow the pspCaller chain to obtain services from the script engine or browser. (Note that the call chain is not the same as the creation chain — also known as container chain or site chain. The creation chain may be available through some other mechanism such as IObjectWithSite.)
"this" pointer | When DISPATCH_METHOD is set in wFlags, there may be a "named parameter" for the "this" value. The DISPID will be DISPID_THIS and it must be the first named parameter. The unused riid parameter in IDispatch::Invoke has been removed. The puArgArr parameter in IDispatch::Invoke has been removed.

See the IDispatch::Invoke documentation for the following examples:

"Calling a method with no arguments"

"Getting and setting properties"

"Passing parameters"

"Indexed Properties"

"Raising exceptions during Invoke"

"Returning errors"

Example

VARIANT var;
   BSTR bstrName;
   DISPID dispid;
   IDispatch *pdex;
   DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0};

   // Assign to pdex and bstrName
   pdex->GetDispID(bstrName, fdexNameCaseSensitive, &dispid);
   pdex->InvokeEx(dispid, LOCALE_USER_DEFAULT,
   DISPATCH_PROPERTYGET, &dispparamsNoArgs,
   &var, NULL, NULL);

See Also

IDispatchEx Interface | IDispatchEx::GetDispID | IDispatchEx::GetNextDispID

© 2001 Microsoft Corporation. All rights reserved.

Build: 9309.1546


getFileVersion 方法

返回指定文件的版本号。

object.GetFileVersion(pathspec)

参数

object
必选项。总是一个 FileSystemObject 的名字。
pathspec
必选项。指向特定文件的（绝对或相对）路径。

说明

如果 pathspec 并不以所命名的文件结束，或者文件并不包含版本信息，GetFileVersion 方法将返回长度为0的字符串("")。

注意 GetFileVersion 方法只处理所提供的路径字符串。它并不会尝试对路径进行解析，也不会检查指定的路径是否存在。

下面的例子说明了 GetFileVersion 方法的用法。

function ShowFileVersion(pathspec){
  var fso, s = "";
  fso = new ActiveXObject("Scripting.FileSystemObject");
  s += fso.GetFileVersion(pathspec);
  if (s == "")
    s = "No version information available.";
  return(s);
}

要求

版本 1


SerialNumber 属性 (JScript)

JScript

SerialNumber 属性

返回连续十进制数字，用于唯一标识磁盘卷。

object.SerialNumber

object 为 Drive 对象。

说明

可以使 SerialNumber 属性来确保在带有可移动媒体的驱动器中插入正确的磁盘。

下列代码阐明了 SerialNumber 属性的用法：

function ShowDriveInfo(drvpath){
  var fso, d, s, t;
  fso = new ActiveXObject("Scripting.FileSystemObject");
  d = fso.GetDrive(fso.GetDriveName(fso.GetAbsolutePathName(drvpath)));
  switch (d.DriveType)
  {
    case 0: t = "Unknown"; break;
    case 1: t = "Removable"; break;
    case 2: t = "Fixed"; break;
    case 3: t = "Network"; break;
    case 4: t = "CD-ROM"; break;
    case 5: t = "RAM Disk"; break;
  }
  s = "Drive " + d.DriveLetter + ": - " + t;
  s += "<br>" + "SN: " + d.SerialNumber;
  return(s);
}

要求

版本 1


找不到主题

您方才单击的链接无法与目标页连接。下面列出了一些可能原因及补救措施：

原因 | 补救措施
目标主题的 URL 不正确或已改变。 | 改用索引或搜索功能。
帮助的安装有问题。 | 卸载帮助，然后重新运行安装程序。


使用消息框

使用警告、提示和确认

可以使用警告、确认和提示消息框来获得用户的输入。这些消息框是 window 对象的接口方法。由于 window 对象位于对象层次的顶层，因此实际应用中不必使用这些消息框的全名（例如 "window.alert()"），不过采用全名是一个好注意，这样有助于您记住这些消息框属于哪个对象。

警告消息框

alert 方法有一个参数，即希望对用户显示的文本字符串。该字符串不是 HTML 格式。该消息框提供了一个“确定”按钮让用户关闭该消息框，并且该消息框是模式对话框，也就是说，用户必须先关闭该消息框然后才能继续进行操作。

window.alert("欢迎！请按“确定”继续。");

确认消息框

使用确认消息框可向用户问一个“是-或-否”问题，并且用户可以选择单击“确定”按钮或者单击“取消”按钮。confirm 方法的返回值为 true 或 false。该消息框也是模式对话框：用户必须在响应该对话框（单击一个按钮）将其关闭后，才能进行下一步操作。

var truthBeTold = window.confirm("单击“确定”继续。单击“取消”停止。");
if (truthBeTold) {
window.alert("欢迎访问我们的 Web 页！");
}  else  window.alert("再见啦！");

提示消息框

提示消息框提供了一个文本字段，用户可以在此字段输入一个答案来响应您的提示。该消息框有一个“确定”按钮和一个“取消”按钮。如果您提供了一个辅助字符串参数，则提示消息框将在文本字段显示该辅助字符串作为默认响应。否则，默认文本为 "<undefined>"。

与alert( ) 和 confirm( ) 方法类似，prompt 方法也将显示一个模式消息框。用户在继续操作之前必须先关闭该消息框

var theResponse = window.prompt("欢迎？","请在此输入您的姓名。");


在浏览器中显示信息

Microsoft JScript 提供了两种方式来在浏览器中直接显示数据。可以使用write( ) 和 writeln( )，这两个函数是document 对象的方法。也可以在浏览器中以表格的方式显示信息，以及用警告、提示和确认消息框来显示信息。

使用document.write( ) 和 document.writeln( )

显示信息最常用的方式是 document 对象的 write( ) 方法。该方法用一个字符串作为其参数，并在浏览器中显示。该字符串可以是普通文本或 HTML。

字符串可以用单引号或双引号引起来。这样可以引用那些包含引号或撇号的内容。

document.write("Pi is approximately equal to " + Math.PI);
document.write( );
注意 下面的简单函数可以避免在浏览器中显示信息时不得不键入 "document.write"。该函数不能告知要显示的信息是否未定义，而是发布给命令 "w();"，该命令将显示一个空行。
function w(m) { // 编写函数。
m = "" + m + ""; //  确保变量 m 是一个字符串。
if ("undefined" != m) { // 判别是否为空或其它未定义的项。
   document.write(m);
   }
document.write("<br>");
}

w('<IMG SRC="horse.gif">');
w();
w("This is an engraving of a horse.");
w();

writeln( ) 方法与 write( ) 方法几乎一样，差别仅在于是前者将在所提供的任何字符串后添加一个换行符。在 HTML 中，这通常只会在后面产生一个空格；不过如果使用了 <PRE> 和 <XMP> 标识，这个换行符会被解释，且在浏览器中显示。

在调用 write( ) 方法时，如果该文档不处于在调用 write( ) 方法时的打开和分析的过程中，该方法将打开并清除该文档，所以它可能是有危险的。该示例显示了一个每隔一分钟就显示时间的脚本，但是在第一次显示后由于它从过程中将自己清除，因此会导致失败。

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JScript">
function singOut()  {
var theMoment = new Date();
var theHour = theMoment.getHours();
var theMinute = theMoment.getMinutes();
var theDisplacement = (theMoment.getTimezoneOffset() / 60);
theHour -= theDisplacement;
if (theHour > 23)  {
theHour -= 24
}
document.write(theHour + " hours, " + theMinute + " minutes, Coordinated Universal Time.");
window.setTimeout("singOut();", 60000);
}
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT>
singOut();
</SCRIPT>
</BODY>
</HTML>

如果使用 window 对象的 alert() 方法而不是 document.write()，则该脚本可以运行。

window.alert(theHour + " hours, " + theMinute + " minutes, Coordinated Universal Time.");
window.setTimeout("singOut();", 60000);
}

清除当前文档

document 对象的 clear() 方法将清空当前文档。该方法也将清除您的脚本（随文档的其他部分一起），因此要特别注意该方法的使用方式及在什么时候使用该方法。

document.clear();


版权所有

Microsoft® JScript®

本文档中的信息，包括 URL 和其他 Internet Web 站点参考，如有变更，恕不另行通知。除非特别注明，其中提及的示例公司、机构、产品、姓名和事件均属虚构。如与真实公司、机构、产品、姓名和事件雷同，纯属巧合。遵守任何适用的版权法是用户的责任。在不限制版权所辖权利的前提下，未经Microsoft Corporation 的明确书面许可，无论出于何种目的，均不得以任何形式或借助任何手段（电子、机械、影印或其他手段）复制或传播文档中的任何部分，或将其存储于或引入检索系统。

Microsoft 可能拥有对本文档内容的专利、专利申请、商标、版权或其他知识产权。除了任何Microsoft 授权许可协议所提供的明确书面许可，拥有本文档并不赋予您任何有关这些专利、专利申请、商标、版权或其他知识产权的许可。

© 1991-2000 Microsoft Corporation。保留所有权利。

Microsoft、MS、MS-DOS、ActiveX、JScript、Microsoft Press、MSDN、Visual Basic、Windows、Windows NT、Win32、和 Win32s 均系 Microsoft Corporation 在美国或其他国家（或地区）的注册商标或商标。

其中提到的其他真实公司及产品名称可能是其各自所有者的商标。


必须赋给数组长度一个有限正整数

在对现有 Array 对象设置其 length 属性时，所指定的数组长度不是正整数，也不是零。如果给某个 Array 对象的 length 属性所赋的值时为负数或不是数值 (NaN) 时，就会产生这个错误。请注意 JScript 会自动将小数数值转换为整数。

要改正此错误

  • 将一个正整数赋给 length 属性。数组大小没有上界限制，但不能超过整数的最大值（大约为40亿）。下面的示例演示了给 Array 对象的 length 属性赋值的正确方法。
    var my_array = new Array();
my_array.length = 99;

请参阅

使用数组


数组长度必须是一个有限正整数

在调用 Array 构造函数时使用的参数不是自然数（所谓自然数就是零加上正整数集合）。

要改正此错误

  • 在创建一个新的 Array 对象时只能使用正整数。如果要创建一个只有一个元素且不是整数的数组，请执行下面两步操作。首先，创建一个只有一个元素的数组，然后将这个值赋给第一个元素 (array[0])。下面的示例将产生这个错误。
    var piArray = new Array(3.14159);

    下面的示例演示了指定一个只有单个数值元素的数组的正确方法。

    var piArray = new Array(1);
piArray [0] = 3.14159;

    数组大小没有上界限制，但不能超过整数的最大值（大约为40亿）。

请参阅

使用数组


需要 Array 或 arguments 对象

没有将数组作为参数。这个错误只在 Function.prototype.apply方法中发生。如果使用这个函数，则该函数的第二个参数要么是 Array 对象，要么是 Arguments 对象。

要改正此错误

  • 指定一个 Array 或 Arguments 对象作为第二个参数。

请参阅

使用数组 | apply 方法 | JScript 函数


需要 Boolean

试图用一个不是 Boolean 类型的对象来调用 Boolean.prototype.toString 或者 Boolean.prototype.valueOf 方法。这种调用类型的对象必须是 Boolean 类型。例如：

var o = new Object;
o.f = Boolean.prototype.toString;
o.f();

要改正此错误

  • 只使用 Boolean 类型的对象调用 Boolean.prototype.toString 或 Boolean.prototype.valueOf 方法。

请参阅

Boolean 对象 | JScript 数据类型 | 控制程序流 | 复制、传递和比较数据


不能给函数返回值赋值

试图将一个值赋给函数结果。可以将函数结果赋给某个变量，但其本身不能用作变量。如果希望将一个新值赋给该函数本身，则不要圆括号（函数调用运算符）。下面的示例演示了产生这一错误的情形。

myFunction() = 42;  // 试图强将 42 赋给该函数调用的结果。

要改正此错误

  • 不要使用函数调用的值作为赋值对象。可以将函数调用的结果赋给某个变量。
    myVar = myFunction(42);
  • 或者，可以将函数本身（不是其返回数值）赋给一个变量。
    myFunction = new Function("return 42;");

请参阅

Function 对象 | 编写 JScript 代码 | JScript 函数


不能给 'this' 赋值

试图给 this 赋值，this 是 JScript 关键字，表示:

  • 当前正在执行某个方法的对象，
  • 如果没有当前方法（或该方法不属于任何其它对象），则是指全局对象。

所谓方法就是由对象调用的 JScript 函数。在一个方法内， this 关键字代表调用该方法的对象的引用（这种情况下，就是指使用 new 运算符调用类构造函数所创建的对象）。

在一个方法内可以使用 this 来引用当前对象，但不能对其赋予新的值。

要改正此错误

不要试图对 this 赋值。要访问某个实例化对象的属性或方法，请使用点运算符（例如 circle.radius）。

注意 不能将用户创建的变量命名为 this；这是一个 JScript 保留字。

请参阅

This | 脚本问题解答


在循环外不能有 'break'

试图在循环外使用 break 关键字。break 关键字用来结束一个循环或 switch 语句。它必须位于循环体内或 switch 语句内。

例外

break 关键字后面可以带一个标签。

break labelname;

只有在嵌套式循环或 switch 语句中并且需要跳出的循环不是最内层循环时，才需要使用这种带标签形式的break 关键字。

要改正此错误

请确保 break 关键字位于封闭的循环或 switch 语句内。

请参阅

Break | 控制程序流 | 脚本问题解答


在循环外不能有 'continue'

试图在循环外使用 continue 语句。只有在下述语句内才可以使用 continue 语句：

  • do-while 循环，
  • while 循环，
  • for 循环，
  • for/in 循环。

要改正此错误

请确保 continue 语句位于下述语句的内部：

  • do-while 循环，
  • while 循环，
  • for 循环，
  • for/in 循环。

请参阅

Continue | 控制程序流 | 脚本问题解答


条件编译已关闭

在没有先启用条件编译的情况下试图使用条件编译变量。打开条件编译将告诉 JScript 编译器要解释那些以 @ 开头作为条件编译变量的标识符。使用下面的语句作为条件代码的起始语句就可以打开条件编译：

/*@cc_on @*/

要改正此错误

在条件代码的起始处添加下面的语句：

/*@cc_on @*/

请参阅

条件编译 | 条件编译变量 | @cc_on | @if 语句 | @set 语句


需要 Date 对象

试图对一个不是Date 类型的对象调用 Date.prototype.toString 或 Date.prototype.valueOf 方法。这种调用类型的对象必须是 Date 类型。例如：

var o = new Object;
o.f = Date.prototype.toString;
o.f();

要改正此错误

只能对Date 类型的对象调用 Date.prototype.toString 或者 Date.prototype.valueOf 方法。

请参阅

Date 对象 | getDate 方法 | 内部对象


一条 'switch' 语句中只能有一个 'default'

在一个 switch 语句中试图使用多个 default 语句。Default分支总是位于 switch 语句的最后一个分支语句（也就是匹配失败的情形）。

要改正此错误

从 switch 语句中删除任何多余的default 分支语句（在switch 语句中使用了多个default 语句）。

请参阅

Switch | 控制程序流 | JScript 保留的关键字


需要 Enumerator 对象

试图对一个非 Enumerator 类型的对象调用 Enumerator.prototype.atEnd、 Enumerator.prototype.item、 Enumerator.prototype.moveFirst 或者 Enumerator.prototype.moveNext 方法。这种调用类型的对象必须是 Enumerator 类型。下面是违反这个规则的代码示例：

var o = new Object;
o.f = Enumerator.prototype.atEnd;
o.f();

要改正此错误

只能对Enumerator 类型的对象调用其 Enumerator.prototype.atEnd、Enumerator.prototype.item、Enumerator.prototype.moveFirst 或者 Enumerator.prototype.moveNext 方法。要查找某个对象是否为 Enumerator 对象，请使用：

if(x instanceof Enumerator)

请参阅

Enumerator 对象


异常抛出，但无法抓住

在代码中包括了一条 throw 语句，但没有将其包含在某个 try 语句块内，或者没有相关的 catch 语句块来捕获错误。异常是在 try 语句块中使用 throw 语句被抛出，并且应该由 try 语句块外的 catch 语句抓住。

要改正此错误

  • 用 try 语句块将可能产生异常的代码封住，并确保外面有一个相应的 catch 语句块。
  • 确认 catch 语句中为正确的异常格式。
  • 如果异常被再次抛出，确认存在相应的 catch 语句。

请参阅

Error 对象 | throw 语句 | try...catch 语句


需要 '(' (JScript)

JScript

需要 '('

试图用一组圆括号来括住一个表达式，但缺少开始圆括号。有些表达式必须用一组开始圆括号和结束圆括号括住。注意下面示例中括号的使用。

for (initialize; test; increment) {
statement;
}

要改正此错误

  • 给求值表达式添加左圆括号。


需要 ')' (JScript)

JScript

需要 ')'

试图用一组圆括号来括住一个表达式，但缺少结束圆括号。有些表达式必须用一组开始圆括号和结束圆括号括住。注意下面示例中括号的使用。

for (initialize; test; increment) {
statement;
}

要改正此错误

  • 给求值表达式添加右圆括号。


需要 '/'

试图创建一个正则表达式文字，但没有包括其中的斜杠 (/)。正如字符串文字表示为一对单引号内的字符一样，正则表达式文字则表示为一对斜杠 (/) 内的字符。

要改正此错误

插入一个结束斜杠，标志正则表达式的结束位置。

请参阅

正则表达式对象 | Regular Expression 语法


需要 ':'(JScript)

JScript

需要 ':'

试图创建一个使用三目条件运算符的表达式，但是在第二操作数和第三操作数之间没有包括冒号。三目（三个操作数）条件运算符在第二个（为真）和第三个（为假）操作数之间一定要有一个冒号。

要改正此错误

在第二个和第三个操作数之间插入一个冒号。

请参阅

条件（三目）运算符 (?:) | JScript 运算符


需要 ';'

试图在一行内写多条语句，但没有用分号将各条语句加以分隔。分号是用来结束语句的。可以在一行内写多条语句，不过每条语句后都必须加分号以便分开。

要改正此错误

  • 在每条语句后写一个分号。
  • 确保函数调用正确使用圆括号。
  • 确保没有忘记 for 循环头部中的分号。

请参阅

编写 JScript 代码


需要 '@'

试图使用 @set 语句创建一个用于条件编译语句的变量，但在变量名称前没有 @ 符号。

要改正此错误

立即在变量名之前添加一个 @ 符号。例如：

@set @myvar = 1

请参阅

@set 语句 | 条件编译 | 条件编译变量


需要 '}'

没有用右大括号来标记函数体、循环、代码块或者对象初始化软件的结束位置。这种错误的一个示例是：for 循环只有标记循环体起点的左括号。

要改正此错误

添加右大括号，标记函数、循环、语句块、或者对象初始化的结束位置。

请参阅

Function 对象 | 控制程序流


需要 '=' (JScript)

JScript

需要 '='

试图创建一个供条件编译语句使用的变量，但在变量和要赋给该变量的值之间缺少一个等号。

要改正此错误

添加一个等号。例如：

@set @myvar1 = 1

请参阅

条件编译 | 条件编译变量


需要 ']' (JScript)

JScript

需要 ']'

引用数组元素时缺少右中括号。引用数组元素的任何表达式都必须包括左中括号和右中括号。

要改正此错误

给引用该数组无素的表达式添加右中括号。

请参阅

使用数组 | Array 对象


正则表达式中缺少 ']' (JScript)

JScript

正则表达式中缺少 ']'

试图创建一个用于正则表达式匹配的字符类，但是没有右中括号。单个的文字字符组合可以用括号括起来表示一个字符类。一个字符类可以匹配其中包含的任一字符。例如，/[abc]/ 可以匹配字母 “a”, “b”, 或 “c” 的任何一个。

要改正此错误

给正则表达式加上右中括号。

注意 如果想匹配单中括号，可以使用反斜杠将其转义 - \( - 这样就不会被JScript 解释为特殊字符。)

请参阅

正则表达式对象 | Regular Expression 语法


需要 'catch'

使用了处理异常的try 语句块，但没有些相应的 catch 语句。异常处理机制需要将那些可能失败的代码，连同当异常发生后不会执行的代码一起，包在一个 try 语句块中。发生异常时通过使用 throw 语句将异常从 try 语句块中抛出，并被 try 语句块外的一个或多个catch 语句抓获。

要改正此错误

  • 添加相应的 catch 语句块。
  • 试试使用 finally 语句块而不使用 catch语句块。

请参阅

try...catch 语句 | Error 对象


需要常数

试图在条件编译测试语句中使用一个（非条件编译）变量。条件编译测试语句的值必须为一个常数。

要改正此错误

  • 用文字替代该变量。
  • 用条件编译变量替代该变量。

请参阅

条件编译 | 条件编译变量


需要 '@end'

试图创建一个条件编译的代码块，但在最后没有@end 语句。通过把JScript 语句放在 @if/@end 块内，可以实现条件编译。

要改正此错误

添加相应的 @end 语句。

请参阅

条件编译 | 条件编译变量


需要十六进制数

创建了一个不正确的 Unicode 转义序列。Unicode 转义序列以 \u 开头，后跟整整四位十六进制数（不多，也不少）。Unicode 十六进制数不仅包含数字 0-9，大写字母 A-F，还有小写字母 a-f。下面的示例演示了正确形成的 Unicode 转义序列。

z = "\u1A5F";

要改正此错误

请确保 Unicode 十六进制数是以 \u 开头的，只包含数字0－9，大写字母 A-F、小写字母 a-f；并组成四个数字。

注意 如果希望在字符串中使用文字文本 t \u，请使用两个短斜杠 _(\\u) – 一个用来将第一个反斜杠转义。

请参阅

JScript 数据类型


需要标识符 (JScript)

JScript

需要标识符

在需要标识符的上下文中，使用了不是标识符的内容。标识符可以是：

  • 变量，
  • 属性，
  • 数组，
  • 函数名称。

要改正此错误

更改该表达式，使标识符出现在等号的左边。

请参阅

使用数组


需要标识符、字符串或者数字

使用了不正确的文字语法来声明对象文字。对象文字的属性必须是标识符、字符串或一个数。对象文字(也称为“对象初始化程序”)由用逗号分割的属性:值对组成，所有值对都用括号括起来。例如：

var point = {x:1.2, y:-3.4};

要改正此错误

请确保使用了正确的文字语法。

请参阅

逗号运算符 (,)


正则表达式中缺少 ')' (JScript)

JScript

正则表达式中缺少 ')'

试图创建一个正则表达式捕获、断言和组合，但不包括结束圆括号。正则表达式中的圆括号有多个用途。首先，它们主要用来抓捕子表达式，指定断言、或将模式组合，从而通过 *、+、? 等等使这些项被看作一个单一的单位。

要改正此错误

加上最右边的结束圆括号。

注意 如果想匹配单括号，可以使用反斜杠将其转义 - \( - 这样就不会被 JScript 解释为特殊字符。)

请参阅

正则表达式对象 | Regular Expression 语法


需要 'while'

在 do … while 循环中没有包含 while 条件。一条 do 语句必须有相应的 while 测试。

要改正此错误

在循环体结束处加上 while 测试语句.

请参阅

while 语句 | 控制程序流


需要 '{'

没有用左大括号来标记函数体的开始位置。对于组成函数体的代码，即使只有一行，也必须包含在左大括号和右大括号中。请注意函数体对大括号的使用要比循环中的使用更严格。

要改正此错误

添加左大括号，标记函数体的开始。

请参阅

Function 对象


函数没有合法的 prototype 对象

试图使用 instanceof 来确定一个对象是否是从某个特定函数类派生而来,但重新定义的该对象的prototype 属性要么是空的，要么是外部对象类型(都不是有效的JScript 对象)。外部对象可能来自主机对象模型(例如, Internet Explorer 的产品和 window 产品，或一个外部的COM 对象)。

要改正此错误

确保函数的 prototype 属性引用了合法的 JScript。

请参阅

Function 对象 | prototype 属性


需要 Function 对象

试图对一个不是 Function 对象调用 Function prototype 方法，或者在函数调用上下文中使用了对象。例如，下面的代码将产生该错误，因为 example 不是一个函数。

var example = new Object();  // 创建一个称为 "example" 的新对象。
var x = example();  // 试图将 example 作为一个函数加以调用。

要改正此错误

  • 只对 Function 对象调用 Function prototype 方法。
  • 确保只使用函数调用运算符() 来调用函数。

请参阅

Function 对象 | prototype 属性


非法赋值 (JScript)

JScript

非法赋值

试图对一个只读的标识符赋值。不能对只读的标识符赋值。例如，主机定义对象和外部 COM 对象。

要改正此错误

不要赋值给只读标识符。

请参阅

赋值运算符 (=)


非法字符 (JScript)

JScript

非法字符

JScript 编译器认为由字符（或多个字符）组成的标识符非法。合法字符应遵守下述规则：

  • 第一个字符必须为ASCII字母（大写或小写）或下划线 (_)。
  • 后续字符可以是ASCII字母、数字和下划线。
  • 标识符名称不能为保留字。

要改正此错误

避免使用不属于 JScript 语言定义部分的字符。

请参阅

JScript 变量 | 特殊字符 | JScript 数据类型


字符集范围无效 (JScript)

JScript

字符集范围无效

试图创建的正则表达式含有无效的字符集范围。字符集的范围必须只能是单个字符的变化，诸如a-z 或 0-9；不能在字符集中包括诸如 \w 的字符类。字符集范围的第一个字符也必须位于范围中第二个字符的前面。例如：

var good = /[a-z]/;  // 有效的字符范围 - a 在 z 之前。
var notGood = /[z-a]/;  // 无效的字符范围 - z 不在 a 之前。

要改正此错误

只使用单字符来组合正则表达式字符集，并确保他们具有正确的顺序。

请参阅

正则表达式对象 | Regular Expression 语法


需要 JScript 对象

试图将一个非-JScript 对象传给需要 JScript对象的内置函数。各种内置函数都需要在 JScript 中定义的对象（与主机定义的对象和控件之类的外部组件相对）。

要改正此错误

请确保正在作为参数传递的对象具有正确的类型。

请参阅

JScript 对象 | 使用数组


未找到标签

所引用的标签不存在。标签可用来标记代码块，不过必须在特定范围内，而且必须唯一。

要改正此错误

  • 确认没有拼错标签名称。
  • 确保所有标签所引用的都是在当前作用域内定义过的标签（包括在作用域之前所做的定义）。

请参阅

带标签的语句 | switch 语句 | break 语句 | continue 语句


标签定义重复

创建新标签时给定的名称与现有标签名称重复。标签可以用来标记语句块，但在一个指定范围内必须是唯一的。

要改正此错误

请确保程序中所使用的所有标签在名自的作用域内都是唯一的。

请参阅

Labeled 语句 | switch 语句 | break 语句 | continue 语句


需要 Number 类型

试图对一个不是Number 类型的对象调用 Number.prototype.toString 或 Number.prototype.valueOf 方法。这种调用类型的对象必须是Number 类型。

要改正此错误

只调用Number 的Number.prototype.toString or Number.prototype.valueOf 方法。

请参阅

Number 对象 | number 属性


需要 Object 类型

试图对一个不是Object 类型的对象调用 Object.prototype.toString 或Object.prototype.valueOf 方法。这种调用类型的对象必须是 Object 类型。

要改正此错误

只调用Object 的 Object.prototype.toString 或 Object.prototype.valueOf 方法。

请参阅

Object 对象 | JScript 对象


需要对象的成员

试图对某个对象的数据成员执行某个操作，但该成员不存在。

要改正此错误

请确保所输入的数据成员名字是正确的。

请参阅

Object 对象 | JScript 对象


需要正则表达式对象 (JScript)

JScript

需要正则表达式对象

试图对RegExp类型对象之外的其他对象调用 RegExp.prototype.toString 或 RegExp.prototype.valueOf方法。这种调用的类型必须是 RegExp 对象。

要改正此错误

在 RegExp 对象类型 中，只能调用RegExp.prototype.toString 或 RegExp.prototype.valueOf 方法

请参阅

正则表达式对象 | Regular Expression 语法


函数外有 'return' 语句

在代码的全部范围内使用。return 语句只能出现在函数体内。

使用 () 运算符调用函数是一个表达式。所有的表达式都有值；return 语句用来指定由函数返回的值。通常的形式是：

return [ expression ];

当执行到 return 语句时，首先对该表达式求值并将其返回作为该函数的值。如果没有表达式，则返回 undefined 。

当 return 语句执行完毕后，该函数的执行就终止了，即使还有函数体中仍有其它语句。这个规则的一个例外是如果该 return 语句发生在某个 try 块内，且有相应的 finally 块，那么 在该函数返回前将执行 finally 块中的代码。

如果函数是由于到达函数体结束处而不是因为执行return语句返回，则返回值为 undefined（表示该函数的结果无法作为大表达式的部分。

要改正此错误

从代码的主要部分中删除 return 语句。（全部范围）。

请参阅

return 语句 | Function 对象 | caller 属性


需要 String

试图对String对象类型之外的其他类型对象调用String.prototype.toString 或 String.prototype.valueOf 方法。这种调用的类型必须是 String 类型。

要改正此错误

在 String 类型对象中只能调用 String.prototype.toString 或 String.prototype.valueOf 方法

请参阅

String 对象 | toString 方法


语法错误 (JScript)

JScript

语法错误

所创建的语句违反了一条或多条 JScript 的语法规则。

要改正此错误

  • 根据所给定的行号检查程序的语法。
  • 查找不匹配的圆括号或中括号。

请参阅

Error 对象


正则表达式语法错误 (JScript)

JScript

正则表达式语法错误

查找字符串的结构违反了一条或多条关于 JScript 正则表达式的语法规则。

要改正此错误

确保正则表达式查找字符串的结构与 JScript 正则字符串的语法一致。

请参阅

正则表达式对象 | 正则表达式对象的属性 | 正则表达式对象的方法 | Regular Expression 语法 | compile 方法


小数部分的位数越界

试图将一个非法参数传递给Number.prototype.toExponential()。函数toExponential() 的参数为 0 到 20（含 20）之间。

要改正此错误

请确保的 toExponential() 不是太大也不是太小。

请参阅

toExponential 方法


精度越界

试图将一个非法参数传递给 Number.prototype.toPrecision。给 toPrecision 的参数必须为 1 到 21（含21）之间。

要改正此错误

请确保 toPrecision 不是太大也不是太小。

请参阅

toPrecision 方法


待解码 URI 的编码非法

试图对一个不正确 URI（通用资源标识符）进行解码。URI 具有特殊的语法；绝大多数非字母数字字符在用于 URI 必须加以编码。可以使用 encodeURI 和 encodeURIComponent 方法从一个标准的 JScript 字符串创建一个 URI。

一个完整的 URI 是由一系列部件和分隔符组成的。其通用格式为：

<Scheme>:<first>/<second>;<third>?<fourth>

尖括号内的名称代表部件，而 “:”, “/”, “;” 和 “?” 都是作为分隔符的保留字。

要改正此错误

请确保您只需要对合法的 URI 进行解码。你不能对标准的 JScript 字符串解码，因为它们可能含有非法字符。

请参阅

decodeURI 方法 | decodeURIComponent 方法


待编码的 URI 包含有非法字符

试图将字符串编码得到 URI（通用资源标识符），但是包含非法字符。尽管字符串中的绝大多数字符都是合法的，可以转换为 URI，但有些 Unicode 字符序列是非法的。

要改正此错误

请确保待编码的字符串只包含合法的 Unicode 序列。

一个完整的 URI 是由一系列部件和分隔符组成的。其通用格式为：

<Scheme>:<first>/<second>;<third>?<fourth>

尖括号内的名称代表部件，而 “:”, “/”, “;” 和 “?” 都是作为分隔符的保留字。

请参阅

encodeURI 方法 | encodeURIComponent 方法


Throw 的后面必须有一个表达式，且在同一源代码行上

使用了 throw 关键字，但在同一行内没有紧接一个表达式。一个 throw 语句由两部分组成：throw 关键字，后面紧跟待抛出的表达式。例如；

if (denominator == 0) {
 throw new DivideByZeroException();
}

不能将这两个组件分成两行。

要改正此错误

请确保 throw 关键字和待抛出的表达式在同一行。

请参阅

Error 对象 | throw 语句 | try...catch 语句


未定义标识符

JScript 编译器不认识试图使用的标识符。当出现下述情况时，返回未定义值：

  • 不存在的变量
  • 变量已声明，但从未对其赋值
  • 对象属性不存在。

要改正此错误

用var 语句声明一个变量（如 var x)。

请参阅

JScript 变量 | 变量的范围


未预期的限定符 (JScript)

JScript

未预期的限定符

在组织正则表达式的查找模式时，创建了一个带有非法循环因子的模式元素。例如，模式

/^+/

是非法的，因为元素 ^ （输入开始）没有循环因子。下表列出了没有循环因子的元素：

元素 | 描述
^ | 输入开始
$ | 输入结束
\b | 词的边界
\B | 非单词的边界
* | 零个或多个循环
+ | 零个或多个循环
? | 零个或多个循环
{n} | n 循环
{n,} | n 或多个循环
{n,m} | 从 n 到 m 循环,包括 m

要改正此错误

请确保查找模式元素仅包括合法的循环因子。

请参阅

正则表达式对象 | Regular Expression 语法


注释未结束 (JScript)

JScript

注释未结束

多行注释块没有结束。多行注释块以一个 "/*" 组合开始，并以"*/" 组合结束。下面是示例：

/* 这是注释
这是同一注释的另一部分。*/

要改正此错误

请确保以“*/” 结束多行注释。

请参阅

注释语句


字符串常数未结束 (JScript)

JScript

字符串常数未结束

字符串常数后面没有用结束的单引号。字符串常数必须用单引号引起来。

注意 可以使用单引号或双引号作为匹配符，双引号可以包含在单引号所引起来的字符串中，单引号也可以包含在双引号引起来的字符串中。

要改正此错误

给字符串的结束处添加单引号。

请参阅

String 对象 | toString 方法


需要 VBArray

所提供的对象不是所需要的 Visual Basic 中的 safeArray。

new VBArray(safeArray);

VBArrays 是只读的，且不能直接被创建。safeArray 参数为一个 VBArray 值，并且在被传递给 VBArray构造函数之前必须获得一个 VBArray 值。这个值只能通过检索现有的 ActiveX 或其他对象得到。

要改正此错误

请确保只将 VBArray 对象传递给 VBArray 构造函数。

请参阅

VBArray 对象 | 使用数组


运算符总结 (JScript)

JScript

运算符总结

下表按照其各自类别，列出了 JScript 运算符。

计算运算符

运算符 | 符号
加法 | +
递减 | —
除法 | /
递增 | ++
除法 | %
取余 | *
减法 | -
一元取相反数 | —

逻辑运算符

运算符 | 符号
逗号 | ,
条件（三元） | ?:
相等 | ==
大于 | >
大于等于 | >=
严格相等 | ===
不等 | !=
小于 | <
小于等于 | <=
逻辑与 | &&
逻辑非 | !
逻辑或 | ||
非严格相等 | !==

按位运算符

运算符 | 符号
按位与 | &
按位左移 | <<
按位取反 | ~
按位或 | |
按位右移 | >>
按位异或 | ^
无符号右移 | >>>

赋值运算符

赋值运算符

复合赋值运算符

其他运算符

delete

instanceof

new

typeof

void

要求

版本 1


技术预览版本中的 Jscript 语言特性

Microsoft JScript 5.6 引入了几种新的语言特性。

入门

下列文档将有助于您跟上这项技术发展的步伐。同时，我们鼓励您对这些文档给出宝贵的建议和意见。

若要了解 | 请参阅
in 运算符 | in 运算符
新 Global 对象的方法 | decodeURIComponent 方法 decodeURI 方法 encodeURI 方法 encodeURIComponent 方法
新 Object 对象的方法 | hasOwnProperty 方法 isPrototypeOf 方法
新 Function 对象的方法 | apply 方法 call 方法
新 Array 对象的方法 | pop 方法 push 方法 shift 方法 splice 方法 unshift 方法
新 Number 对象的方法 | toFixed 方法 toExponential 方法 toPrecision 方法
新 Date 对象的方法 | toDateString 方法 toTimeString 方法 toLocaleDateString 方法 toLocaleTimeString 方法
新 RegExp 对象的方法 | toString 方法 global 属性 ignoreCase 属性 multiline 属性
新 String 对象的方法 | localeCompare 方法 toLocaleLowerCase 方法 toLocaleUpperCase 方法
新 Error 对象的方法 | name 属性 message 属性


版本信息 (JScript)

JScript

版本信息

下表列出了宿主应用程序实现的 Microsoft JScript 的版本信息。

宿主应用程序 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 | 5.5
Microsoft Internet Explorer 3.0 | x |  |  |  |  |
Microsoft Internet Information Server 1.0 |  | x |  |  |  |
Microsoft Internet Explorer 4.0 |  |  | x |  |  |
Microsoft Internet Information Server 4.0 |  |  | x |  |  |
Microsoft Windows Scripting Host 1.0 |  |  | x |  |  |
Microsoft Visual Studio 6.0 |  |  |  | x |  |
Microsoft Internet Explorer 5.0 |  |  |  |  | x |
Microsoft Internet Information Services 5.0 |  |  |  |  |  | x

下表列出了 JScript 语言特性，以及首先引入该特性的版本。

语言元素 | 1.0 | 2.0 | 3.0 | 4.0 | 5.0 | 5.5
0…n 属性 |  |  |  |  |  | x
$1...$9 属性 |  |  | x |  |  |
abs 方法 | x |  |  |  |  |
acos 方法 | x |  |  |  |  |
ActiveXobject 对象 |  |  | x |  |  |
加法运算符 (+) | x |  |  |  |  |
anchor 方法 | x |  |  |  |  |
apply 方法 |  |  |  |  |  | x
arguments 属性 |  | x |  |  |  |
Array 对象 |  | x |  |  |  |
asin 方法 | x |  |  |  |  |
赋值运算符 (=) | x |  |  |  |  |
atan 方法 | x |  |  |  |  |
atan2 方法 | x |  |  |  |  |
atEnd 方法 |  |  | x |  |  |
big 方法 | x |  |  |  |  |
按位与运算符 (&) | x |  |  |  |  |
按位左移运算符 (<<) | x |  |  |  |  |
按位取非运算符 (~) | x |  |  |  |  |
按位或运算符 (|) | x |  |  |  |  |
按位右移运算符 (>>) | x |  |  |  |  |
按位异或运算符 (^) | x |  |  |  |  |
blink 方法 | x |  |  |  |  |
bold 方法 | x |  |  |  |  |
Boolean 对象 |  | x |  |  |  |
break 语句 | x |  |  |  |  |
call 方法 |  |  |  |  |  | x
callee 属性 |  |  |  |  |  | x
caller 属性 |  | x |  |  |  |
catch 语句 |  |  |  |  | x |
@cc_on 语句 |  |  | x |  |  |
ceil 方法 | x |  |  |  |  |
charAt 方法 | x |  |  |  |  |
charCodeAt 方法 |  |  |  |  |  | x
逗号运算符 (,) | x |  |  |  |  |
// （单行注释语句） | x |  |  |  |  |
/*..*/ （多行注释语句） | x |  |  |  |  |
比较运算符 | x |  |  |  |  |
compile 方法 |  |  | x |  |  |
concat 方法（数组） |  |  | x |  |  |
concat 方法（字符串） |  |  | x |  |  |
条件编译 |  |  | x |  |  |
条件编译变量 |  |  | x |  |  |
条件（三元）运算符 (?:) | x |  |  |  |  |
constructor 属性 |  | x |  |  |  |
continue 语句 | x |  |  |  |  |
cos 方法 | x |  |  |  |  |
数据类型转换 |  |  | x |  |  |
Date 对象 | x |  |  |  |  |
decodeURI 方法 |  |  |  |  |  | x
decodeURIComponent |  |  |  |  |  | x
递减法运算符 ( — ) | x |  |  |  |  |
delete 运算符 |  |  | x |  |  |
description 属性 |  |  |  |  | x |
dimensions 方法 |  |  | x |  |  |
除法运算符 (/) | x |  |  |  |  |
do...while 语句 |  |  | x |  |  |
E 属性 | x |  |  |  |  |
encodeURI 方法 |  |  |  |  |  | x
encodeURI 组件 |  |  |  |  |  | x
Enumerator 对象 |  |  | x |  |  |
相等运算符 (==) | x |  |  |  |  |
Error 对象 |  |  |  |  | x |
escape 方法 | x |  |  |  |  |
eval 方法 | x |  |  |  |  |
exec 方法 |  |  | x |  |  |
exp 方法 | x |  |  |  |  |
fixed 方法 | x |  |  |  |  |
floor 方法 | x |  |  |  |  |
fontcolor 方法 | x |  |  |  |  |
fontsize 方法 | x |  |  |  |  |
for 语句 | x |  |  |  |  |
for...in 语句 |  |  |  |  | x |
fromCharCode 方法 |  |  | x |  |  |
Function 对象 |  | x |  |  |  |
function 语句 | x |  |  |  |  |
getDate 方法 | x |  |  |  |  |
getDay 方法 | x |  |  |  |  |
getFullYear 方法 |  |  | x |  |  |
getHours 方法 | x |  |  |  |  |
getItem 方法 |  |  | x |  |  |
getMilliseconds 方法 |  |  | x |  |  |
getMinutes 方法 | x |  |  |  |  |
getMonth 方法 | x |  |  |  |  |
Getobject 函数 |  |  | x |  |  |
getSeconds 方法 | x |  |  |  |  |
getTime 方法 | x |  |  |  |  |
getTimezoneOffset 方法 | x |  |  |  |  |
getUTCDate 方法 |  |  | x |  |  |
getUTCDay 方法 |  |  | x |  |  |
getUTCFullYear 方法 |  |  | x |  |  |
getUTCHours 方法 |  |  | x |  |  |
getUTCMilliseconds 方法 |  |  | x |  |  |
getUTCMinutes 方法 |  |  | x |  |  |
getUTCMonth 方法 |  |  | x |  |  |
getUTCSeconds 方法 |  |  | x |  |  |
getVarDate 方法 |  |  | x |  |  |
getYear 方法 | x |  |  |  |  |
Global 对象 |  |  | x |  |  |
global 属性 |  |  |  |  |  | x
大于运算符 (>) | x |  |  |  |  |
大于等于运算符 (>=) | x |  |  |  |  |
hasOwnProperty 方法 |  |  |  |  |  | x
严格相等运算符 (===) | x |  |  |  |  |
@if 语句 |  |  | x |  |  |
if...else 语句 | x |  |  |  |  |
ignoreCase 属性 |  |  |  |  |  | x
递增运算符 (++) | x |  |  |  |  |
index 属性 |  |  | x |  |  |
indexOf 方法 | x |  |  |  |  |
不等运算符 (!=) | x |  |  |  |  |
Infinity 属性 |  |  | x |  |  |
input 属性 |  |  | x |  |  |
instanceof 运算符 |  |  |  |  | x |
isFinite 方法 |  |  | x |  |  |
isNaN 方法 | x |  |  |  |  |
isPrototypeOf 方法 |  |  |  |  |  | x
italics 方法 | x |  |  |  |  |
item 方法 |  |  | x |  |  |
join 方法 |  | x |  |  |  |
Labeled 语句 |  |  | x |  |  |
lastIndex 属性 |  |  | x |  |  |
lastIndexOf 方法 | x |  |  |  |  |
lastMatch 属性 |  |  |  |  |  | x
lastParen 属性 |  |  |  |  |  | x
lbound 方法 |  |  | x |  |  |
leftContext 属性 |  |  |  |  |  | x
length 属性（参数） |  |  |  |  |  | x
length 属性（数组） |  | x |  |  |  |
length 属性（函数） |  | x |  |  |  |
length 属性（字符串） | x |  |  |  |  |
小于运算符 (<) | x |  |  |  |  |
小于等于运算符 (<=) | x |  |  |  |  |
link 方法 | x |  |  |  |  |
LN2 属性 | x |  |  |  |  |
LN10 属性 | x |  |  |  |  |
localeCompare 方法 |  |  |  |  |  | x
log 方法 | x |  |  |  |  |
LOG2E 属性 | x |  |  |  |  |
LOG10E 属性 | x |  |  |  |  |
逻辑与运算符 (&&) | x |  |  |  |  |
逻辑非运算符 (!) | x |  |  |  |  |
逻辑或运算符 (||) | x |  |  |  |  |
match 方法 |  |  | x |  |  |
Math 对象 | x |  |  |  |  |
max 方法 | x |  |  |  |  |
MAX_VALUE 属性 |  | x |  |  |  |
message 属性 |  |  |  |  |  | x
min 方法 | x |  |  |  |  |
MIN_VALUE 属性 |  | x |  |  |  |
取余运算符 (%) | x |  |  |  |  |
moveFirst 方法 |  |  | x |  |  |
moveNext 方法 |  |  | x |  |  |
multiline 属性 |  |  |  |  |  | x
乘法运算符 (*) | x |  |  |  |  |
name 属性 |  |  |  |  |  | x
NaN 属性（全局） |  |  | x |  |  |
NaN 属性（数字） |  | x |  |  |  |
NEGATIVE_INFINITY 属性 |  | x |  |  |  |
new 运算符 | x |  |  |  |  |
非严格相等运算符 (!==) | x |  |  |  |  |
Number 对象 |  | x |  |  |  |
number 属性 |  |  |  |  | x |
Object 对象 |  |  | x |  |  |
运算符优先级 | x |  |  |  |  |
parse 方法 | x |  |  |  |  |
parseFloat 方法 | x |  |  |  |  |
parseInt 方法 | x |  |  |  |  |
PI 属性 | x |  |  |  |  |
pop 方法 |  |  |  |  |  | x
POSITIVE_INFINITY 属性 |  | x |  |  |  |
pow 方法 | x |  |  |  |  |
prototype 属性 |  | x |  |  |  |
PopertyIsEnumeramble 属性 |  |  |  |  |  | x
push 方法 |  |  |  |  |  | x
random 方法 | x |  |  |  |  |
RegExp 对象 |  |  | x |  |  |
正则表达式对象 |  |  | x |  |  |
正则表达式语法 |  |  | x |  |  |
replace 方法 | x |  |  |  |  |
return 语句 | x |  |  |  |  |
reverse 方法 |  | x |  |  |  |
rightContext 属性 |  |  |  |  |  | x
round 方法 | x |  |  |  |  |
ScriptEngine 函数 |  | x |  |  |  |
ScriptEngineBuildVersion 函数 |  | x |  |  |  |
ScriptEngineMajorVersion 函数 |  | x |  |  |  |
ScriptEngineMinorVersion 函数 |  | x |  |  |  |
search 方法 |  |  | x |  |  |
@set 语句 |  |  | x |  |  |
setDate 方法 | x |  |  |  |  |
setFullYear 方法 |  |  | x |  |  |
setHours 方法 | x |  |  |  |  |
setMilliseconds 方法 |  |  | x |  |  |
setMinutes 方法 | x |  |  |  |  |
setMonth 方法 | x |  |  |  |  |
setSeconds 方法 | x |  |  |  |  |
setTime 方法 | x |  |  |  |  |
setUTCDate 方法 |  |  | x |  |  |
setUTCFullYear 方法 |  |  | x |  |  |
setUTCHours 方法 |  |  | x |  |  |
setUTCMilliseconds 方法 |  |  | x |  |  |
setUTCMinutes 方法 |  |  | x |  |  |
setUTCMonth 方法 |  |  | x |  |  |
setUTCSeconds 方法 |  |  | x |  |  |
setYear 方法 | x |  |  |  |  |
shift 方法 |  |  |  |  |  | x
sin 方法 | x |  |  |  |  |
slice 方法（数组） |  |  | x |  |  |
slice 方法（字符串） |  |  | x |  |  |
small 方法 | x |  |  |  |  |
sort 方法 |  | x |  |  |  |
source 属性 |  |  | x |  |  |
splice 方法 |  |  |  |  |  | x
split 方法 |  |  | x |  |  |
sqrt 方法 | x |  |  |  |  |
SQRT1_2 属性 | x |  |  |  |  |
SQRT2 属性 | x |  |  |  |  |
strike 方法 | x |  |  |  |  |
String 对象 | x |  |  |  |  |
sub 方法 | x |  |  |  |  |
substr 方法 |  |  | x |  |  |
substring 方法 | x |  |  |  |  |
减法运算符 (-) | x |  |  |  |  |
sup 方法 | x |  |  |  |  |
switch 语句 |  |  | x |  |  |
tan 方法 | x |  |  |  |  |
test 方法 |  |  | x |  |  |
this 语句 | x |  |  |  |  |
throw 语句 |  |  |  |  | x |
toArray 方法 |  |  | x |  |  |
toDateString 方法 |  |  |  |  |  | x
toExponential 方法 |  |  |  |  |  | x
toFixed 方法 |  |  |  |  |  | x
toGMTString 方法 | x |  |  |  |  |
toLocaleDateString 方法 |  |  |  |  |  | x
toLocaleLowercase 方法 |  |  |  |  |  | x
toLocaleString 方法 | x |  |  |  |  |
toLocaleTimeString 方法 |  |  |  |  |  | x
toLocaleUppercase 方法 |  |  |  |  |  | x
toLowerCase 方法 | x |  |  |  |  |
toPrecision 方法 |  |  |  |  |  | x
toString 方法 |  | x |  |  |  |
toTimeString 方法 |  |  |  |  |  | x
toUpperCase 方法 | x |  |  |  |  |
toUTCString 方法 |  |  | x |  |  |
try 语句 |  |  |  |  | x |
typeof 运算符 | x |  |  |  |  |
ubound 方法 |  |  | x |  |  |
一元取相反数运算符 (-) | x |  |  |  |  |
undefined 属性 |  |  |  |  |  | x
unescape 方法 | x |  |  |  |  |
unshift 方法 |  |  |  |  |  | x
无符号右移运算符 (>>>) | x |  |  |  |  |
UTC 方法 | x |  |  |  |  |
valueOf 方法 |  | x |  |  |  |
var 语句 | x |  |  |  |  |
VBArray 对象 |  |  | x |  |  |
void 运算符 |  | x |  |  |  |
while 语句 | x |  |  |  |  |
with 语句 | x |  |  |  |  |


版权所有

Microsoft® VBScript®

本文档中的信息，包括 URL 和其他 Internet Web 站点参考，如有变更，恕不另行通知。除非特别注明，其中提及的示例公司、机构、产品、姓名和事件均属虚构。如与真实公司、机构、产品、姓名和事件雷同，纯属巧合。遵守任何适用的版权法是用户的责任。在不限制版权所辖权利的前提下，未经Microsoft Corporation 的明确书面许可，无论出于何种目的，均不得以任何形式或借助任何手段（电子、机械、影印或其他手段）复制或传播文挡中的任何部分，或将其存储于或引入检索系统。

Microsoft 可能拥有对本文档内容的专利、专利申请、商标、版权或其他知识产权。除了任何Microsoft 授权许可协议所提供的明确书面许可，拥有本文档并不赋予您任何有关这些专利、专利申请、商标、版权或其他知识产权的许可。

© 1991-2000 Microsoft Corporation。保留所有权利。

Microsoft、MS、MS-DOS、ActiveX、Jscript、Microsoft Press、MSDN、Visual Basic、Windows、Windows NT、Win32、和 Win32s 均系Microsoft Corporation 在美国及/或其他国家（或地区）的注册商标。

其中提到的其他真实公司及产品名称可能是其各自所有者的商标。


ActiveX 部件无法创建对象

由于对象类未在系统注册表中注册或者是一个或多个相关的动态链接库无效（DLLs），VBScript 5.5运行时无法初始化对象。另外一种可能情况是，由于未找到或是已经损坏，对象所需的DLL不可用。

要纠正该错误

  • 确保所有相关的DLLs有效。例如，数据存取对象（DAO）所需的DLLs在不同的平台下是不同的。你可能不得不返回到安装程序查找该对象。
  • Internet Explorer可能试图创建对象，但是在Internet Explorer中没有正确的安全许可。重置Internet Explorer 安全设置并重试。

请参阅

使用VBScript对象


发生异常

脚本调用COM对象，然后产生异常。

要纠正该错误

  • 除非该调用由 Raise 方法产生，请与产生错误的COM对象开发人员联系。
  • 请与微软产品服务联系报告出现错误信息的情况。

请参阅

Raise 方法 | Err


参数不可选

调用过程但是参数数量错误。传递给过程的参数的数量必须与过程定义的参数数量相同。

要纠正该错误

检查函数符号确保提供了所有必须的参数。

请参阅

VBScript 过程


该数组为定长的或者临时被锁定

试图用 ReDim 函数来改变一个定长数组的元素数目。动态数组或者 Variant 变量内的数组可以被暂时的锁定。

要纠正该错误

  • 如果在过程内部定义数组，用 ReDim 函数将其从静态变为动态。
  • 如果在模块水平上说明数组，不要指定数组中元素的数目。

请参阅

Array 函数 | Dim 语句 | ReDim 语句 | Set 语句 | Private 语句 | Public 语句


在类中不能有多个缺省的属性/方法

在类定义中标记了多于一个的缺省属性或方法。在类中只能有一个缺省的属性和方法。

要纠正该错误

确保该类只有一个缺省的属性和方法。

请参阅

Function 语句


调用 Sub 时不能使用圆括号

未使用Call调用子程序，但是使用了圆括号()。当不使用Call 语句调用子程序时，不要使用圆括号。

要纠正该错误

  • 在调用子程序的地方移去圆括号。
  • 改用Call 语句调用子程序。

请参阅

Call 语句 | Sub 语句


无法执行请求的操作

当主机使脚本引擎中断时无法继续执行脚本。主机未指定明确的返回错误代码。

要纠正该错误

该错误的解决与主机有关。


类不支持自动化

试图操作一个并不支持自动化的对象属性或方法。可以创建并将指针传递给不支持自动化的对象，但是不能获取它的属性和方法。

要纠正该错误

检查创建对象应用程序的文档中关于该类自动化使用的限制。

注意 对象可能已经通过使用 CreateObject 被创建，但可能已经通过主机对象模型被引入。

请参阅

CreateObject 函数


类初始化或终止不能带参数

类定义带有Class_Initialize事件或Class_Terminate 事件。这些过程有一个或更多的参数。不要给这些过程指定参数。

要纠正该错误

从类定义中移去参数。

请参阅

Initialize 事件 | Terminate 事件


类未定义

引用未定义（通过New 或 Set语句）的类。

要纠正该错误

确保在引用类之前已经定义。

请参阅

Set 语句


只能在 Property Get 中指定 'Default'

对Property Let 或 Property Set 使用了保留字 Default。只能对 Property Get 指定保留字 Default 。

要纠正该错误

只对 Property Get 指定保留字 Default。

请参阅

Property Let 语句 | Property Set 语句 | Property Get 语句


说明 'Default' 必须同时说明 'Public'

定义了一个属性为Default， 但没有定义为Public。如果定义属性为Default，必须同时指定Public。

要纠正该错误

定义所有的Default 属性为 Public。

请参阅

Function 语句


被零除

创建一个试图将数字被零除的表达式。被零除得到无穷大（不可用）结果。

要纠正该错误

检查表达式的输入或大小写错误。


加载 DLL 错误

应用程序引用了一个无法找到的DLL，一个DLL可能引用了另一个无法找到的DLL。

要纠正该错误

  • 确保DLL存在。
  • 使用全路径名引用DLL。
  • 获得被引用的DLL并使其对其他DLL有效。


在正则表达式中需要 ']'

试图为正则表达式匹配创建一个字符类，但未包含右括号。将单独的字符组合放到方括号里可以将其装配到字符类中。例如， /[abc]/ 匹配字母 "a"、"b" 或 "c" 中任意一个。

要纠正该错误

在正则表达式中添加右括号。

请参阅

正则表达式对象(RegExp)


需要 'Case'

创建Select...End Select 构造，但未包含任何Case语句。下面演示了Select...End Select 构造的正确使用方法。

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else expressionlist-n
      [elsestatements-n]]
End Select

要纠正该错误

确保Select...End Select 构造包含所有必须的部分。

请参阅

Select Case 语句


需要 'Class'

创建一个Class 过程，但是以关键字End结束，而不是使用语句End Class。通常使用End Class语句结束Class 过程。

要纠正该错误

使用End Class语句结束Class 过程。

请参阅

Class 语句


需要 'End'

创建结构但未正常结束。下表列出了必须以End语句结束的结构。

结构 | 结束语句
Sub | End Sub
Function | End Function
If | End If
Class | End Class
With | End With
Select | End Select

要纠正该错误

  • 以End Sub语句结束一个Sub过程。
  • 以End Function 结束一个Function过程。
  • 以End If 语句结束一个If 语句。
  • 以End Class 语句结束一个Class语句。
  • 以End With 语句结束一个With语句。
  • 以End Select 语句结束一个Select语句。

请参阅

Sub 语句 | Function 语句


需要语句的结束

在语句结尾外出现文字。

要纠正该错误

  • 移去额外的文字。
  • 如果要注释代码行，在语句的结尾处插入单引号"'"。

请参阅

VBScript 代码约定


需要 '=' (VBScript)

Visual Basic Scripting Edition

需要 '='

使用Set 语句，但未包含=。

要纠正该错误

使用Set 语句的完整语法。

请参阅

Set 语句


需要表达式

创建一个Select...End Select结构，但包含一个Case分句。Case Else语句（失败的情况）必须在它自己那一行出现。下面演示了Select...End Select 结构的正确使用。

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else expressionlist-n
      [elsestatements-n]]
End Select

要纠正该错误

为Case Else 语句另起一行。

请参阅

Select Case 语句


需要 'Function'

创建一个Function过程，但是以关键字End结束， 而不是以End Function 语句结束。一个Function过程必须包含结束语句End Function 。

要纠正该错误

以语句End Function 结束Function过程。

请参阅

Function 语句 | Call 语句 | Dim 语句 | Exit 语句 | Set 语句 | Sub 语句


需要标识符 (VBScript)

Visual Basic Scripting Edition

需要标识符

使用VBScript 保留词作为变量名称。

要纠正该错误

  • 使用其它名称（一个不是VBScript保留词的名称）。
  • 以[ ]封装保留词。


需要 'If'

创建了一个If...Then...Else 块，但未正常结束块。块语句If 必须为一行的第一个语句，且必须以End If 结束。下面演示了一个If...Then...Else块 的正确结构。

If condition Then
   [statements]
[ElseIf condition-n Then
   [elseifstatements]] . . .
[Else
   [elsestatements]]
End If

要纠正该错误

检查块If 语句是否以End 语句。如果是的话，将它改成End If 语句。

请参阅

If...Then...Else 语句


需要 'In'

创建一个For Each...Next 块，但在第一行未包括关键字In 。下面演示了For Each...Next 块的正确结构。

For Each element In group
   [statements]
   [Exit For]
   [statements]
Next [element]

要纠正该错误

确保For Each...Next 块包含了所有必须的部分。

请参阅

For Each...Next 语句 | Do...Loop 语句 | Exit 语句 | For...Next 语句 | While...Wend 语句


在正则表达式中需要 ')' (VBScript)

Visual Basic Scripting Edition

在正则表达式中需要 ')'

试图创建常规的嵌套表达式，但未包含“)”。在正则表达式中括号有几个目的。首先，它将分离的项组成为单个子表达式，所以项目可以通过*，+，?等等来当作一个单元来处理。

要纠正该错误

在常规的嵌套表达式中添加右（闭）括号“)”。

请参阅

正则表达式对象 (RegExp)


需要整数常数

试图在Dim 语句中使用非常数创建一个数组。在VBScript中，Dim 语句中大小值必须为一个常数。例如，

Dim a(10)   ' 有效。
Dim a(x)    ' 无效。
Dim a(1=2)  ' 无效

要纠正该错误

使用ReDim 语句。

请参阅

Dim 语句 | ReDim 语句


需要 '(' (VBScript)

Visual Basic Scripting Edition

需要 '('

当创建过程说明时未包含开括号“(”，

Sub mysample x // x需要使用圆括号括起来。
End Sub

或使用redim 语句。

Redim x // x需要使用圆括号括起来。

要纠正该错误

添加左（开）括号“(”。

请参阅

运算符优先级


在属性声明中需要 Let 或 Set 或 Get

创建了一个Property Let， Property Set，或 Property Get 语句，但未包含关键字Let, Set, 或 Get。Property 语句后面必须带Let，Set，或 Get。

要纠正该错误

确保Property 语句后面跟Let， Set， 或Get。

请参阅

Property Let 语句 | Property Set 语句 | Property Get 语句


需要文字常数

声明常数，但是赋予其变化的表达式（可以变化的值）。常数不能包含运行时代码。

要纠正该错误

当声明常数时不使用表达式。

请参阅

VBScript 常数 | VBScript 常数 | Const 语句


需要 'Loop'

创建了一个Do 循环结构，但未正常中断循环。Do 循环结构与Loop 语句相关联结束。下面演示了Do 循环结构的正确使用。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或者可以使用下面的语法：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

要纠正该错误

确保Do循环结构包含了所有必须的部分。

请参阅

Do...Loop 语句 | Exit 语句 | For...Next 语句 | While...Wend 语句


需要 'Next'

创建了一个For...Next 循环结构，但未正常结束循环。一个For...Next 循环结构必须以一个Next语句结束。下面演示了一个For...Next 循环结构的正确结构。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

要纠正该错误

确保For...Next循环结构包含了所有必须的部分。

请参阅

For...Next 语句 | Do...Loop 语句 | Exit 语句 | For Each...Next 语句 | While...Wend 语句


需要 'Property'

创建了一个Property 过程（Property Let，Property Set，或Property Get）， 但未使用End Property 语句结束过程。Property过程必须以End Property语句结束。

要纠正该错误

确保 Property过程以End Property语句结束。

请参阅

Property Let 语句 | Property Set 语句 | Property Get 语句


需要 ')' (VBScript)

Visual Basic Scripting Edition

需要 ')'

试图封装一套括号中的表达式，但未包含闭括号“)”。必须用一套开括号和闭括号封装一些表达式。

要纠正该错误

给要求值的表达式添加右（闭）括号“)”。

请参阅

运算符优先级


需要 'Select'

创建了一个Select...End Select 结构，但未包含结束语句End Select 。下面演示了Select...End Select 结构的正确使用方法。

Select Case testexpression
   [Case expressionlist-n
      [statements-n]] . . .
   [Case Else expressionlist-n
      [elsestatements-n]]
End Select

要纠正该错误

确保Select...End Select结构包含了所有必须的部分。

请参阅

Select Case 语句 | If...Then...Else 语句


需要语句

作为参数传递给Execute语句的字符串无法被解析为一个语句。Execute语句不能被用来动态执行VBScript代码。例如，考虑如下的 VBScript代码。

Execute "msgbox 1"  '因为msgbox是一个语句，所以有效。
Execute "5*4"       '由于5*4无法被解释为一个语句所以失败。

不仅仅是Execute和Eval ，在任何需要一个语句的脚本代码的编译过程中也产生Expected statement错误。例如，如下代码在Internet Explorer 中造成这个错误，

<html>
<script language=vbscript>
    5*4
</script>
</html>

注意这里有两个在VBScript中不同且无关的语句，

  • 编译并执行不工作语句的Execute语句，
  • Execute 方法.

要纠正该错误

  • 确保传递给Execute 语句的字符串为一个语句。
  • 如果要求值的字符串为一个表达式，使用Eval。

请参阅

Execute 语句 | Eval


需要 'Sub'

创建了一个Sub 过程，但是使用关键字End结束而不是使用End Sub 语句终止。一个Sub过程必须包含一个End Sub终止语句。

要纠正该错误

使用End Sub 语句终止Sub 过程。

请参阅

Sub 语句 | Call 语句 | Dim 语句 | Exit 语句 | Function 语句


需要 'Then'

创建了一个If...Then...Else结束，但在第一行中为包含关键字Then。下面的代码演示了If...Then...Else 结构的正确使用。

If condition Then statements [Else elsestatements ]

或者可以使用块形式语法：

If condition Then
   [statements]
[ElseIf condition-n Then
   [elseifstatements]] . . .
[Else
   [elsestatements]]
End If

要纠正该错误

确保 If...Then...Else结构包含了所有必须的部分。

请参阅

If...Then...Else 语句 | Select Case 语句 | 使用条件语句


需要 'To'

创建一个For...Next 循环，但没有在第一行中包含关键字To。一个For...Next循环 的第一行必须包含关键字To 。下面演示了一个For...Next 循环的正确结构。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

要纠正该错误

确保For...Next循环包含了所有必须的部分。

请参阅

For...Next 语句 | For Each...Next 语句 | Do...Loop 语句 | Exit 语句 | For...Next 语句 | While...Wend 语句


需要 'Wend'

创建了一个While...Wend 循环，但是没有正确终止循环。一个 While...Wend 循环必须使用语句Wend 来终止。下面演示了一个While...Wend 循环的正确结构。

While condition
   Version [statements]
Wend

要纠正该错误

确保While...Wend循环包含了所有必须的部分。

请参阅

代码中循环 | While...Wend 语句 | Do...Loop 语句 | For...Next 语句 | For Each...Next 语句 | Exit 语句


需要 'While' 或 'Until'

创建了一个Do循环，但是未包含相关的While 或 Until 关键字。一个Do 循环的测试条件需要在测试条件语句中使用一个While或Until 关键字。下面演示 一个Do 循环的正确结构。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或者可以使用语法：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

要纠正该错误

确保Do循环包含了所有必须的部分。

请参阅

代码中循环 | Do...Loop 语句 | For...Next 语句 | For...Next 语句 | While...Wend 语句 | Exit 语句


需要 'While'、'Until' 或语句的结束

创建了一个Do循环，但是未包含相关的关键字While 或 Until。一个Do 循环的测试条件需要在测试条件语句中使用一个While或Until 关键字。下面演示了 一个Do 循环的正确结构。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或者可以使用语法：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

要纠正该错误

  • 确保 Do 循环包含了所有必须的部分。
  • 使用关键字While 或 Until来结束Do循环。

请参阅

代码中循环 | Do...Loop 语句 | For...Next 语句 | For...Next 语句 | While...Wend 语句 | Exit 语句


需要 'With'

创建了一个With块，但是以关键字End而不是语句End With 结束。一个 With 块必须使用一个End With 语句结束。下面演示了With块的正确组成。

With object
   statements
End With

要纠正该错误

  • 如果使用关键字End 结束一个With块，将它改成End With语句。
  • 确保With控制结构了所有必须的部分。

请参阅

使用条件语句 | With 语句 | Set 语句 | If...Then...Else 语句 | Select Case 语句


在自动化操作中未找到文件名或类名

使用GetObject 函数，但是将一个不可识别的类或文件名作为参数。GetObject 函数要求包含要获取的对象的文件的完整的路径和名称，或者是在系统中注册过的类名称。

要纠正该错误

  • 检查名称的拼写错误，然后重试。
  • 确保class 参数的名称与在系统中注册的相匹配。

请参阅

GetObject 函数 | CreateObject 函数


For 循环未初始化

在脚本中执行跳到For...Next 循环中间的结果。由于For...Next 循环计数必须被初始化所以产生错误。下面演示了一个For...Next 循环的正确结构。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

要纠正该错误

  • 移去跳转至For...Next 循环的语句。
  • 确保For...Next循环包含了所有必须的部分。

请参阅

使用循环语句 | For...Next 语句 | Do...Loop 语句 | Exit 语句 | For Each...Next 语句 | While...Wend 语句


标识符太长

创建了一个包含态多字符的变量或函数名称。限制为255个字符。

要纠正该错误

选择一个较短的名称。

请参阅

VBScript变量 | VBScript 数据类型 | Dim 语句 | Public 语句 | Private 语句


非法赋值 (VBScript)

Visual Basic Scripting Edition

非法赋值

在一个赋值操作的左边试图使用一个只读标识符。不能对一个只读标识符赋值。

要纠正该错误

只在一个赋值操作的右边使用只读标识符。

请参阅

赋值运算符 (=) | 比较运算符 | 运算符优先级 | 运算符总结 | Set 语句


内部错误

发生内部错误。

要纠正该错误

除非这是由Raise 方法产生，请与微软产品服务联系报告出现错误信息的情况。

请参阅

Raise 方法


无效字符 (VBScript)

Visual Basic Scripting Edition

无效字符

在一个表达式中试图使用双字节字符集（DBCS）或其他不被支持的字符。

要纠正该错误

将不被支持的字符封装在方括号 []中。


无效 'exit' 语句

在以下程序控制结构之一中使用了Exit 语句：

  • With 语句。
  • If...Then...Else语句。
  • Select Case语句。

仅在如下结构中可以合法使用Exit 语句来退出：

  • Do...While 循环 (Exit Do)。
  • For...Next 循环 (Exit For)。
  • For Each...Next 循环 (Exit For)。
  • Function 过程 (Exit Function)。
  • Sub 过程 (Exit Sub)。

要纠正该错误

  • 可能不适当地使用了Exit If， Exit With，或Exit Select。
  • 不要和If， With，Select 语句一起使用Exit。

请参阅

Exit 语句 | Do...Loop 语句 | For Each...Next 语句 | For...Next 语句 | Function 语句 | Sub 语句


无效 'for' 循环控制变量

创建了一个For...Next循环。换句话说，可能在For...Next中使用了一个非法的控制变量。下面的代码演示了一个For...Next 循环的正确结构。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

要纠正该错误

修改For...Next 循环的控制变量，使其在外循环的范围内唯一。

请参阅

代码中循环 | For...Next 语句 | Do...Loop 语句 | Exit 语句 | For Each...Next 语句 | While...Wend 语句


无效数字

表达式的一个值太大或超出范围。

要纠正该错误

使用较小的值。

请参阅

VBScript 数据类型 | VarType 函数


无效或不合格的引用

试图对不止一个对象使用With语句。With语句只能被非空对象使用。下面演示了一个With 块的正确结构。

With object
   statements
End With

要纠正该错误

为With 语句指定一个对象。

请参阅

With 语句


无效图片

试图加载一个无法识别格式的图像。有效格式包括位图（*.bmp），图标（*.ico），以及Windows 元文件（*.wmf）。

要纠正该错误

确保要加载的图像文件的格式是有效的。

请参阅

LoadPicture 函数


字符集越界 (VBScript)

Visual Basic Scripting Edition

字符集越界

试图使用无效字符创建正则表达式。正则表达式是由字母数字和元字符组成的。

要纠正该错误

仅仅使用有效正则表达式字符来组成正则表达式。

请参阅

正则表达式对象(RegExp)


无效使用关键词 'Me'

Visual Basic Scripting Edition

无效使用关键字 'Me'

试图使用Set给标识符 Me赋值。Me是一个被保留的标识符，且不能被设定。

要纠正该错误

将变量的名称改成与Me不同。


非法使用 Null

试图获得一个为Null 的Variant变量的值。你只能获得包含有效值的Variant 变量的值。Null 是一个 Variant 一个用来指示一个数据项不包含任何有效数据的子类型。

要纠正该错误

确保变量包含有效数据。

请参阅

IsNull 函数


'loop' 没有 'do'

创建了一个Do 循环，但未正确地建立循环。Do 循环以Do语句开始。下面演示了一个Do 循环的正确结构。

Do [{While | Until} condition]
   [statements]
   [Exit Do]
   [statements]
Loop

或者可以使用这个语法：

Do
   [statements]
   [Exit Do]
   [statements]
Loop [{While | Until} condition]

要纠正该错误

  • 在不删除Loop 语句的情况下可能试图删除一个Do 控制结构。
  • 确保Do循环包含了所有必须的部分。

请参阅

Do...Loop 语句 | Exit 语句 | For...Next 语句 | While...Wend 语句


必须在一个类的内部定义

创建了一个 Property 过程（Property Let， Property Set，或 Property Get）， 但是在 Class 定义的外部进行了定义。只能在同一类里面创建 Property 过程。

要纠正该错误

确保所有的 Property Let、Property Set 和 Property Gets 在一个 Class 定义里面定义了。

请参阅

Property Let 语句 | Property Set 语句 | Property Get 语句


必须为行的第一个语句

代码的多语句行包含了一个If...Then...Else 语句， 但If...Then...Else 语句不是改行的第一个语句。If...Then...Else 语句必须为行的第一个语句。

要纠正该错误

将If 或 Else语句移动到新的一行。

请参阅

If...Then...Else 语句


未找到命名参数

调用一个过程并指定一个特别的参数，但是过程未被定义为接受以为名称的参数。除非在过程定义中出现，一个命名参数不能在过程调用中使用。

要纠正该错误

检查参数名称是否正确拼写，然后再试着调用过程。

请参阅

VBScript 代码约定


名称重定义

声明了一个在脚本其他地方已经使用的名称。

要纠正该错误

改变标识符名称使其在脚本的全局范围内唯一。


参数数目必须与属性说明一致

所说明的参数数目太少了。当使用Property Let 或 Property Set，参数数目必须比相应的Property Get 返回的数字大1。

要纠正该错误

确保Property Let 和 Property Set 至少比由Property Get.返回的参数数目多1。

请参阅

Property Let 语句 | Property Set 语句 | Property Get 语句


对象不支持当前的区域设置

试图操作一个不支持当前区域设置的对象。区域设置是和给定语言以及国家/地区相对应的一系列信息。本地影响预定义程序项的语言和本地特定设置。以下两种情况时本地信息很重要：

  • code locale 影响语言项例如关键字，并且定义本地特定设置例如小数和列表分割符，日期格式和字符排列顺序。
  • system locale 影响本地相关的功能执行。例如，当显示数字或者将字符串转换为日期时。使用操作系统提供的控制面板工具来设定系统。

要纠正该错误

检查对象支持的区域设置。

请参阅

CDate 函数


对象不支持此操作

试图引用该对象不支持的一个方法或属性。不是所有的对象支持所用的操作。

要纠正该错误

  • 检查属性和方法以确保没有打字错误。
  • 参见对象的文档获取更多的信息。

请参阅

使用VBScript对象 | CreateObject 函数 | GetObject 函数


对象不支持该属性或方法

对该自动化对象指定了一个并不存在的属性或方法。不是所有的对象都支持所有的属性和方法。

要纠正该错误

  • 检查属性和方法以确保没有打字错误。
  • 参见对象的文档获取更多的信息。


对象不是一个集合

试图对一个不是 Collection 类型的对象进行只对 Collection 对象有效的操作。有些属性、方法和操作仅可应用于 Collection 对象。Collection 对象是包含一组互相关联的对象的一种对象。一旦集合中发生了改变，一个对象在 Collection 对象中的位置也会发生改变；因此，Collection 对象中的任何一个对象的位置都可能变化。

要纠正该错误

  • 检查对象或属性名称的拼写。
  • 验证对象是一个Collection 对象。
  • 查看用来向集合中添加该对象的 Add 方法，确保语法正确且任何标识符的拼写都正确。


对象不能安全创建

试图使用一个未被标识为安全创建的对象。对象创建是否安全由主机决定。总的来说，允许不信任脚本进行有害操作（例如操作硬盘）的对象是不安全的。

例如，使用作为客户端的Microsoft Internet Explorer 运行 FileScriptingObject 是不安全的，但是可以在带有Windows Script Host的本地机器使用该对象。

要纠正该错误

  • 确保在使用一个安全的对象。
  • 与对象开发者联系看是否为安全版本。
  • 阅读对象文档发现该对象是否安全。


对象不能安全初始化

试图使用未被标识为初始化安全的对象。对象创建是否安全由主机决定。总的来说，允许不信任脚本进行有害操作（例如操作硬盘）的对象是不安全的。

例如，使用作为客户端的Microsoft Internet Explorer 运行 FileScriptingObject 是不安全的，但是可以在带有Windows Script Host的本地机器使用该对象。

要纠正该错误

  • 确保在使用一个安全的对象。
  • 与对象开发者联系看是否为安全版本。
  • 阅读对象文档发现该对象是否安全。

请参阅

Initialize 事件


脚本对象不安全

试图使用未被标识为脚本安全的对象。对象创建是否安全由主机决定。总的来说，允许不信任脚本进行有害操作（例如操作硬盘）的对象是不安全的。

例如，使用作为客户端的Microsoft Internet Explorer 运行 FileScriptingObject 是不安全的，但是可以在带有Windows Script Host的本地机器使用该对象。

要纠正该错误

  • 确保在使用一个安全的对象。
  • 与对象开发者联系看是否为安全版本。
  • 阅读对象文档发现该对象是否安全。


需要对象

提供的对象无效（或无法认为是一个对象）。对属性和方法的引用需要一个显式的对象限定符。

要纠正该错误

  • 提供一个对象限定符。
  • 检查对象限定符的拼写。


未设置对象变量

试图使用无效对象的对象属性。如果遗漏了 Set语句，将在对象引用产生错误。

要纠正该错误

为对象变量指定一个引用。

请参阅

Property Set 语句


内存不足

分配与该计算机有效内存一样多的内存。这可能是一个动态分配数组增长得太大，或者是对象实例数目过多。

要纠正该错误

  • 使用Erase语句来重新分配动态数组的储存空间。
  • 使用ReDim语句来重新分配储存空间。
  • 关闭任何已经打开、不必需的应用程序，文件或者源文件。

请参阅

Erase 语句 | Dim 语句 | Nothing | ReDim 语句 | CreateObject 函数


堆栈溢出

过程嵌套太深。每次代码从一个过程跳到另一个过程，本地变量的内容被放到堆栈中。堆栈是一个大小随着要求执行的脚本动态增长和缩小的内存工作区域。

要纠正该错误

  • 检查没有嵌套很深的过程。
  • 确保递归（重入）过程没有经常的调用自身。
  • 确保递归过程被正常终止。


字符串空间溢出

试图创建字符串对象时系统内存被用尽。这可能是因为动态分配数组越来越大或对象实例的数目过大。

要纠正该错误

  • 使用 Erase 语句来重新分配动态数组的储存空间。
  • 使用 ReDim 语句来重新分配储存空间。
  • 关闭任何已经打开、不必需的应用程序，文件或者源文件。

请参阅

Erase 语句 | Dim 语句 | Nothing | ReDim 语句 | CreateObject 函数


溢出

试图赋给变量的赋值太大，这是因为：

  • 赋值，计算或者数据类型转换结果很大以至于不能代表此种类型变量值的范围。
  • 属性赋值超出了属性所能接受的最大值。
  • 整数类型数字的计算结果大于一个整数。

要纠正该错误

  • 将值赋给一个较大取值范围的变量类型。
  • 确保赋值符合属性范围。

请参阅

VBScript变量 | Err


无效过程调用或参数

Visual Basic Scripting Edition

过程调用或者无效参数

所传参数之一超过了允许值的范围，或调用了一个在当前平台下无效的过程。

要纠正该错误

  • 检查过程中参数的允许取值范围。
  • 检查平台与过程有关的特异性信息。

请参阅

VBScript变量 | Function 语句 | Sub 语句 | Call 语句


Property Set 或 Let 至少应该有一个参数

说明了一个没有参数的类的 Set 或 Let 句柄的访问者。

要纠正该错误

增加一个参数给属性访问者。

请参阅

Property Let 语句 | Property Set 语句 | Property Get 语句 | Class 语句


未定义 Sub 或 Function

试图调用一个不存在的过程。

要纠正该错误

检查过程的拼写确保输入正确。

请参阅

Sub 语句 | Function 语句


下标越界

要访问的数组中元素数目比期望的少。例如试图从一个定义为10个元素的数组中访问到11个元素。.

要纠正该错误

  • 确保你的代码中包含检察元素是否越界的边界。
  • 重新定义一个更大的数组大小至需要的维数。

请参阅

UBound 函数 | LBound 函数 | Dim 语句 | ReDim 语句


语法错误 (VBScript)

Visual Basic Scripting Edition

语法错误

创建的语句中违反了VBScript的语法规则。

要纠正该错误

  • 检查两遍表达式中元素的数目。
  • 寻找间接的括号。

请参阅

VBScript 数据类型 | VBScript变量 | VBScript 常数 | VBScript 运算符 | 使用条件语句 | 代码中循环 | VBScript 过程 | VBScript 代码约定


正则表达式中的语法错误 (VBScript)

Visual Basic Scripting Edition

正则表达式中的语法错误

搜索字符串的结构违背了VBScript正则表达式中的一个或多个语法规则。

要纠正该错误

保证常规的搜索字符串的表达式符合Perlde的表达语法。

请参阅

正则表达式对象(RegExp)


类型不匹配

试图比较不相容数据类型的值。例如，比较一个字符串和一个数值。

要纠正该错误

  • 当进行比较时，要确保数据类型相同。
  • 用一个的数据类型来计算另一个的值，然后重新比较。

请参阅

VBScript变量


不需要 'Next'

创建了一个For...Next 或者For Each...Next 构造，但没有包含For语句。例如，在试图去掉For...Next构造时保留了Next语句。下面演示了For...Next构造的正确用法。

For counter = start To end [Step step]
    [statements]
    [Exit For]
    [statements]
Next

要纠正该错误

  • 加上For语句 （循环控制语句）。
  • 去掉多余的Next语句。

请参阅

For...Next 语句 | For Each...Next 语句 | 代码中循环 | Exit 语句


未预期的限定符 (VBScript)

Visual Basic Scripting Edition

未预期的限定符

当构造正则表达式的搜索模式时，没有正确的说明匹配的字符串。

要纠正该错误

确保搜索模式是正确构造的。

请参阅

正则表达式对象(RegExp)


未终止字符串常数 (VBScript)

Visual Basic Scripting Edition

未终止字符串常数

没有用封闭的引号来结束字符串常数。字符串常数必须用一对引号来封闭。

要纠正该错误

在字符串尾部加上封闭的引号。

请参阅

VBScript 常数


变量未定义

在脚本开始处用Option Explicit 语句，后来又使用一个未被说明的变量名称。当使用Option Explicit 语句时，必须用Dim，Private，Public或者ReDim语句显式地说明所有的变量。

要纠正该错误

使用Option Explicit 语句时， 确保用Dim, Private, Public, or ReDim语句定义了所有的变量。

请参阅

Option Explicit 语句 | VBScript变量


变量使用了 VBScript 不支持的自动化类型

试图使用类型库或者对象库中不被支持的数据类型，任何一门编程语言都不能使用类型库或对象库中的所有变量。

要纠正该错误

只使用VBScript识别的变量类型。

请参阅

VBScript变量 | VarType 常数


错误的参数数量或非法的属性赋值

Visual Basic Scripting Edition

错误的参数个数或无效的参数属性值

调用了一个过程，但使用了错误的过程名称，或过程中参数数目错误，或参数类型错误。

传递给过程的参数数目必须与过程定义中的参数数目相符。

要纠正该错误

检查以确保传递给过程的参数列表与过程定义或声明中的相符。

请参阅

Function 语句 | Sub 语句 | Call 语句


赋值运算符

= 运算符


无效过程调用或参数

在过程调用中传递了一个无效参数。这可能是由于参数超出范围，或包含无效数据。另外，有可能在不适当的时间对过程进行了调用。

要纠正该错误

  • 验证传递给过程的参数是有效的。
  • 验证在适当的时间调用函数。


远程服务器不存在或者不能访问

用CreateObject函数 来建立一个远程机器的对象，但是调用失败，这是因为无法访问远程服务器或者没有包含特定的类。

要纠正该错误

  • 检验远程服务器的名字是否正确。
  • 检验远程服务器的 DCOM 可用。
  • 使用 dcomcnfg 验证安全权限是否允许建立对象。


未知的运行时错误

这是一种未知的错误。

要纠正该错误

没有纠正该错误的措施。


版权所有

Microsoft® Windows Script Components®

本文档中的信息，包括 URL 和其他 Internet Web 站点参考，如有变更，恕不另行通知。除非特别注明，其中提及的示例公司、机构、产品、姓名和事件均属虚构。如与真实公司、机构、产品、姓名和事件雷同，纯属巧合。遵守任何适用的版权法是用户的责任。在不限制版权所辖权利的前提下，未经 Microsoft Corporation 的明确书面许可，无论出于何种目的，均不得以任何形式或借助任何手段（电子、机械、影印或其他手段）复制或传播文挡中的任何部分，或将其存储于或引入检索系统。

Microsoft 可能拥有对本文档内容的专利、专利申请、商标、版权或其他知识产权。除了任何 Microsoft 授权许可协议所提供的明确书面许可，拥有本文档并不赋予您任何有关这些专利、专利申请、商标、版权或其他知识产权的许可。

© 1991-2000 Microsoft Corporation。保留所有权利。

Microsoft、MS、MS-DOS、ActiveX、Jscript、Microsoft Press、MSDN、Visual Basic、Windows、Windows NT、Win32、和 Win32s 均系Microsoft Corporation 在美国及/或其他国家（或地区）的注册商标。

其中提到的其他真实公司及产品名称可能是其各自所有者的商标。


简单验证

请输入一个 1 到 10 之间的值：


简单的首页


对象示例

该页需要安装“标签”控件。